[DES] 可能有用的几个加密解密函数,先放着,调查完再来看
和 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++;? ? ? }? }? //缩小选择换位表? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |