加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[DES] 可能有用的几个加密解密函数,先放着,调查完再来看

发布时间:2020-12-15 05:04:53 所属栏目:百科 来源:网络整理
导读:和 flex里面的as里面函数用的数据结构差不多,先放着,再慢慢比较。 这个算法是参考一个DELHI的加密库所使用的算法用C实现的.? 使用CBC模式对文件实行加密,速度大概是16M/SEC ? .这是我所见最快的,请问谁还有更快的算法?不考虑空间问题,但求速度.? 不论何种

和 flex里面的as里面函数用的数据结构差不多,先放着,再慢慢比较。


这个算法是参考一个DELHI的加密库所使用的算法用C实现的.?


使用CBC模式对文件实行加密,速度大概是16M/SEC ? .这是我所见最快的,请问谁还有更快的算法?不考虑空间问题,但求速度.?
不论何种语言.?

//DES函数?
void ? SingledesFunc(unsigned ? int ? *Data,unsigned ? int ? *Key)?
{?

? ? unsigned ? int ? L,R,X,Y,i;?

? ? L ? = ? Data[0];?
? ? R ? = ? Data[1];?
? ? _asm{?
? ? mov ? eax,[L]?
? ? BSWAP ? eax?
? ? mov ? [L],eax?

? ? mov ? eax,[R]?
? ? BSWAP ? eax?
? ? mov ? [R],eax?
? ? }?
? ? ///SwapInteger(L);?
? ? //SwapInteger(R);?

? ? X ? = ? (L ? > > ? ? 4 ? ^ ? R) ? & ? 0x0F0F0F0F; ? R ? = ? R ? ^ ? X; ? L ? = ? L ? ^ ? X ? < < ? ? 4;?
? ? X ? = ? (L ? > > ? 16 ? ^ ? R) ? & ? 0x0000FFFF; ? R ? = ? R ? ^ ? X; ? L ? = ? L ? ^ ? X ? < < ? 16;?
? ? X ? = ? (R ? > > ? ? 2 ? ^ ? L) ? & ? 0x33333333; ? L ? = ? L ? ^ ? X; ? R ? = ? R ? ^ ? X ? < < ? ? 2;?
? ? X ? = ? (R ? > > ? ? 8 ? ^ ? L) ? & ? 0x00FF00FF; ? L ? = ? L ? ^ ? X; ? R ? = ? R ? ^ ? X ? < < ? ? 8;?

? ? R ? = ? R ? < < ? 1 ? | ? R ? > > ? 31;?
? ? X ? = ? (L ? ^ ? R) ? & ? 0xAAAAAAAA;?
? ? R ? = ? R ? ^ ? X;?
? ? L ? = ? L ? ^ ? X;?
? ? L ? = ? L ? < < ? 1 ? | ? L ? > > ? 31;?

? ? for(i= ? 0;i <8;i++)?
? ? {?
? ? ? ? X ? = ? (R ? < < ? 28 ? | ? R ? > > ? 4) ? ^ ? (*Key);?
Key++;?
? ? ? ??
Y ? = ? R ? ^ ? (*Key); ? ? ? ? ? ? ? ? ? ??
Key ? ++;?
? ? ? ? L ? = ? L ? ^ ? (DES_Data[0][ ? X ? ? ? ? ? ? ? ? & ? 0x3F] ? | ? DES_Data[1][ ? X ? > > ? ? 8 ? & ? 0x3F] ? |?
? DES_Data[2][ ? X ? > > ? 16 ? & ? 0x3F] ? ? | ? DES_Data[3][ ? X ? > > ? 24 ? & ? 0x3F] ? |?
? ? ? ? ? ? ? ? ? ? ? ? ? DES_Data[4][ ? Y ? ? ? ? ? ? ? ? & ? 0x3F] ? | ? DES_Data[5][ ? Y ? > > ? ? 8 ? & ? 0x3F] ? |?
? ? ? ? ? ? ? ? ? ? ? ? ? DES_Data[6][ ? Y ? > > ? 16 ? & ? 0x3F] ? ? | ? DES_Data[7][ ? Y ? > > ? 24 ? & ? 0x3F]);?

? ? ? ? X ? = ? (L ? < < ? 28 ? | ? L ? > > ? 4) ? ^ ? (*Key);?
Key++;?

? ? ? ? Y ? = ? L ? ^ ? (*Key);?
Key++;?

? ? ? ? R ? = ? R ? ^ ? (DES_Data[0][ ? ? X ? ? ? ? ? ? ? ? & ? 0x3F] ? | ? DES_Data[1][ ? ? X ? > > ? ? 8 ? & ? 0x3F] ? |?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DES_Data[2][ ? X ? > > ? 16 ? & ? 0x3F] ? | ? DES_Data[3][ ? ? X ? > > ? 24 ? & ? 0x3F] ? |?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DES_Data[4][ ? Y ? ? ? ? ? ? ? ? & ? 0x3F] ? | ? DES_Data[5][ ? Y ? > > ? ? 8 ? & ? 0x3F] ? |?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DES_Data[6][ ? Y ? > > ? 16 ? & ? 0x3F] ? | ? DES_Data[7][ ? Y ? > > ? 24 ? & ? 0x3F]);?
? ? }?

? ? R ? = ? R ? < < ? 31 ? | ? R ? > > ? 1;?
? ? X ? = ? (L ? ^ ? R) ? & ? 0xAAAAAAAA;?
? ? R ? = ? R ? ^ ? X;?
? ? L ? = ? L ? ^ ? X;?
? ? L ? = ? L ? < < ? 31 ? | ? L ? > > ? 1;?

? ? X ? = ? (L ? > > ? ? 8 ? ^ ? R) ? & ? 0x00FF00FF; ? R ? = ? R ? ^ ? X; ? L ? = ? L ? ^ ? X ? < < ? ? 8;?
? ? X ? = ? (L ? > > ? ? 2 ? ^ ? R) ? & ? 0x33333333; ? R ? = ? R ? ^ ? X; ? L ? = ? L ? ^ ? X ? < < ? ? 2;?
? ? X ? = ? (R ? > > ? 16 ? ^ ? L) ? & ? 0x0000FFFF; ? L ? = ? L ? ^ ? X; ? R ? = ? R ? ^ ? X ? < < ? 16;?
? ? X ? = ? (R ? > > ? ? 4 ? ^ ? L) ? & ? 0x0F0F0F0F; ? L ? = ? L ? ^ ? X; ? R ? = ? R ? ^ ? X ? < < ? ? 4;?

? ? _asm{?
? ? mov ? eax,eax?
? ? }?
? ??
? ? Data[0] ? = ? R;?
? ? Data[1] ? = ? L;?
}?


void ? desMakeKey(char ? *Data,unsigned ? int ? * ? Key ?,int ? Reverse)?
{?
??
? ? unsigned ? int ? I,J,L,M,N;?
? ? unsigned ? char ? PC_M[56],? PC_R[56];?
? ? unsigned ? int ? K[32];?

? ? memset(K,? ? 0,sizeof(K));?
? ? for(I=0; ? I <56;I++)?
? ? {?
? ? ? ? if ? ((Data[DES_PC1[I] ? > > ? 3] ? & ? (0x80 ? > > ? (DES_PC1[I] ? & ? 0x07)) ? )!= ? 0)?
PC_M[I] ? = ? 1;?
? ? ? ? else ??
PC_M[I] ? = ? 0;?
? ? }?

? ? for(I=0;I <16;I++)?
? ? {?
? ? ? ? if(Reverse ? )?
? ? ? M ? = ? (15 ? - ? I) ? < < ? 1;?
else ??
? ? ? M ? = ? I ? < < ? 1;?

? ? ? ? N ? = ? M ? + ? 1;?

? ? ? ? for(J=0;J <28;J++)?
? ? ? ? {?
? ? ? ? ? ? L ? = ? J ? + ? ROT[I];?
? ? ? ? ? ? if ? (L ? < ? 28) ??
? ? PC_R[J] ? = ? PC_M[L];?
? ? else ??
? ? PC_R[J] ? = ? PC_M[L ? - ? 28];?
? ? ? ? }?

? ? ? ? for(J=28;J <56;J++)?
? ? ? ? {?
? ? ? ? ? ? L ? = ? J ? + ? ROT[I];?
? ? ? ? ? ? if ? (L ? < ? 56)?
? ? PC_R[J] ? = ? PC_M[L];?
? ? else ??
? ? PC_R[J] ? = ? PC_M[L ? - ? 28];?
? ? ? ? }?

? ? ? ? L ? = ? 0x1000000;?
? ? ? ? for(J=0;J <24;J++)?
? ? ? ? {?
? ? ? ? ? ? L ? = ? L ? > > ? 1;?
? ? ? ? ? ? if(PC_R[DES_PC2[J ? ? ? ? ? ]] ? != ? 0)?
? ? K[M] ? = ? K[M] ? | ? ? L;?
? ? ? ? ? ? if(PC_R[DES_PC2[J ? + ? 24]] ? != ? 0)?
? ? K[N] ? = ? K[N] ? | ? ? L;?
? ? ? ? }?
? ? }?

? ? for(I=0;I <16;I++)?
? ? {?
? ? ? ? M ? = ? I ? < < ? 1; ??
N ? = ? M ? + ? 1;?
? ? ? ? (*Key) ? = ? K[M] ? & ? 0x00FC0000 ? < < ? ? 6 ? | ??
? ? ? ? ? ? ? ? ? ? ? ? K[M] ? & ? 0x00000FC0 ? < < ? 10 ? | ??
? ? ? ? ? ? ? ? ? ? ? ? K[N] ? & ? 0x00FC0000 ? > > ? 10 ? | ??
? ? ? ? ? ? ? ? ? ? ? ? K[N] ? & ? 0x00000FC0 ? > > ? ? 6;?
? ? ? ? Key++;?
? ? ? ? (*Key) ? = ? K[M] ? & ? 0x0003F000 ? < < ? 12 ? | ??
? ? ? ? ? ? ? ? ? ? ? ? K[M] ? & ? 0x0000003F ? < < ? 16 ? | ??
? ? ? ? ? ? ? ? ? ? ? ? K[N] ? & ? 0x0003F000 ? > > ? ? 4 ? | ??
? ? ? ? ? ? ? ? ? ? ? ? K[N] ? & ? 0x0000003F;?
? ? ? ? Key++;?
? ? }?

}?


//缩小选择换位表?
const ? static ? unsigned ? char ? DES_PC1[56] ? =?
{?
56,? 48,? 40,? 32,? 24,? 16,? ? 8,? 57,? 49,? 41,? 33,? 25,? 17,?
? ? ? ? ? 9,? ? 1,? 58,? 50,? 42,? 34,? 26,18,? 10,? ? 2,? 59,? 51,? 43,? 35,?
? ? ? ? 62,? 54,? 46,? 38,? 30,? 22,? 14,? 6,? 61,? 53,? 45,? 37,? 29,? 21,?
? ? ? ? 13,? ? 5,? 60,? 52,? 44,? 36,? 28,20,? 12,? ? 4,? 27,? 19,? 11,? ? 3?
};?

//单纯置换规则 ? ??
const ? static ? ? unsigned ? char ? DES_PC2[48] ? =?
{?
13,? 23,? 20,? ? 9,?
? ? ? ? 22,? 18,? ? 3,? ? 7,? 15,? ? 6,?
? ? ? ? 40,? 39,? 47,?
? ? ? ? 43,? 55,? 31?
};?

//循环表?
const ? static ? ? unsigned ? char ? ROT[16] ? = ??
{1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28};?

//用于DES运算的数据.?
const ? static ? unsigned ? int ? DES_Data[8][64] ? = ? {?
{0x00200000,0x04200002,0x04000802,0x00000000,0x00000800,0x00200802,0x04200800,?
? ? ? ? 0x04200802,0x00200000,0x04000002,0x00000002,0x04000000,0x00000802,?
? ? ? ? 0x04000800,0x00200002,0x04000800,0x04200000,?
? ? ? ? 0x04200000,0x04200802,0x00200800,?
? ? ? ? 0x04000000,?
? ? ? ? 0x00200002,?
? ? ? ? 0x00000802,?
? ? ? ? 0x00000000,0x00200002},?
{0x00000100,0x02080100,0x02080000,0x42000100,0x00080000,0x00000100,0x40000000,?
? ? ? ? 0x40080100,0x02000100,0x40080100,0x42080000,0x00080100,?
? ? ? ? 0x02000000,0x40080000,0x40000100,0x42080100,?
? ? ? ? 0x42080000,0x42000000,0x02000000,?
? ? ? ? 0x00080000,?
? ? ? ? 0x02000100,?
? ? ? ? 0x42080100,?
? ? ? ? 0x00080100,0x40000100},?
{0x00000208,0x08020200,0x08020008,0x08000200,0x00020208,?
? ? ? ? 0x00020008,0x08000008,0x00020000,0x08020208,0x00020008,0x08020000,0x00000208,?
? ? ? ? 0x08000000,0x00000008,0x00000200,0x00020200,?
? ? ? ? 0x08000208,0x08000208,0x08000000,?
? ? ? ? 0x08020200,?
? ? ? ? 0x00000200,?
? ? ? ? 0x08020000,0x00020200},?
{0x01010400,0x00010000,0x01010404,0x01010004,0x00010404,0x00000004,?
? ? ? ? 0x00000400,0x01010400,0x00000400,0x01000404,0x01000000,?
? ? ? ? 0x00000404,0x01000400,0x00010400,0x01010000,?
? ? ? ? 0x00010004,0x01000004,0x00010004,0x00000404,?
? ? ? ? 0x00010000,?
? ? ? ? 0x01010004,?
? ? ? ? 0x01010404,0x01010004},?
{0x10001040,0x00001000,0x00040000,0x10041040,0x10000000,0x10001040,0x00000040,?
? ? ? ? 0x00040040,0x10040000,0x00041000,0x10041000,0x00041040,?
? ? ? ? 0x10040000,0x10000040,0x10001000,0x00001040,0x00040040,0x10040040,?
? ? ? ? 0x00001040,?
? ? ? ? 0x00041040,?
? ? ? ? 0x10001000,?
? ? ? ? 0x10041040,0x10041000},?
? ? ? {0x20000010,0x20400000,0x00004000,0x20404010,0x00000010,0x00400000,?
? ? ? ? 0x20004000,0x00404010,0x20000010,0x00400010,0x20004000,0x20000000,0x00004010,0x20004010,0x00404000,0x20400010,?
? ? ? ? 0x20400010,0x20404000,?
? ? ? ? 0x00400000,?
? ? ? ? 0x00404010,?
? ? ? ? 0x00004000,0x20004010},?
? ? ? {0x00802001,0x00002081,0x00000080,0x00802080,0x00800081,0x00800001,0x00002001,0x00802000,0x00802081,0x00000081,0x00800080,?
? ? ? ? 0x00000001,0x00002000,0x00800000,0x00802001,0x00002080,?
? ? ? ? 0x00800081,0x00000001,?
? ? ? ? 0x00800080,?
? ? ? ? 0x00002080,?
? ? ? ? 0x00802081,?
? ? ? ? 0x00002001,0x00802080},?
? ? ? {0x80108020,0x80008000,0x00008000,0x00108020,0x00100000,0x00000020,0x80100020,0x80008020,?
? ? ? ? 0x80000020,0x80108020,0x80108000,0x80000000,?
? ? ? ? 0x00108000,0x00100020,0x80100000,?
? ? ? ? 0x00100020,0x80000020,0x00108000,0x00008020,?
? ? ? ? 0x80100000,?
? ? ? ? 0x00008020,0x00108000}};?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读