⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aes.cpp

📁 实现DES加密解密算法
💻 CPP
📖 第 1 页 / 共 2 页
字号:
							 Te2[(s3 >>  8) & 0xff] ^							 Te3[(s0      ) & 0xff] ^							 rk[5];						 t2 =							 Te0[(s2 >> 24)       ] ^							 Te1[(s3 >> 16) & 0xff] ^							 Te2[(s0 >>  8) & 0xff] ^							 Te3[(s1      ) & 0xff] ^							 rk[6];						 t3 =							 Te0[(s3 >> 24)       ] ^							 Te1[(s0 >> 16) & 0xff] ^							 Te2[(s1 >>  8) & 0xff] ^							 Te3[(s2      ) & 0xff] ^							 rk[7];						 rk += 8;						 if (--r == 0) {							 break;						 }						 s0 =							 Te0[(t0 >> 24)       ] ^							 Te1[(t1 >> 16) & 0xff] ^							 Te2[(t2 >>  8) & 0xff] ^							 Te3[(t3      ) & 0xff] ^							 rk[0];						 s1 =							 Te0[(t1 >> 24)       ] ^							 Te1[(t2 >> 16) & 0xff] ^							 Te2[(t3 >>  8) & 0xff] ^							 Te3[(t0      ) & 0xff] ^							 rk[1];						 s2 =							 Te0[(t2 >> 24)       ] ^							 Te1[(t3 >> 16) & 0xff] ^							 Te2[(t0 >>  8) & 0xff] ^							 Te3[(t1      ) & 0xff] ^							 rk[2];						 s3 =							 Te0[(t3 >> 24)       ] ^							 Te1[(t0 >> 16) & 0xff] ^							 Te2[(t1 >>  8) & 0xff] ^							 Te3[(t2      ) & 0xff] ^							 rk[3];					 }#endif /* ?FULL_UNROLL */					 /*					 * apply last round and					 * map cipher state to byte array block:					 */					 s0 =						 (Te4[(t0 >> 24)       ] & 0xff000000) ^						 (Te4[(t1 >> 16) & 0xff] & 0x00ff0000) ^						 (Te4[(t2 >>  8) & 0xff] & 0x0000ff00) ^						 (Te4[(t3      ) & 0xff] & 0x000000ff) ^						 rk[0];					 PUTU32(out     , s0);					 s1 =						 (Te4[(t1 >> 24)       ] & 0xff000000) ^						 (Te4[(t2 >> 16) & 0xff] & 0x00ff0000) ^						 (Te4[(t3 >>  8) & 0xff] & 0x0000ff00) ^						 (Te4[(t0      ) & 0xff] & 0x000000ff) ^						 rk[1];					 PUTU32(out +  4, s1);					 s2 =						 (Te4[(t2 >> 24)       ] & 0xff000000) ^						 (Te4[(t3 >> 16) & 0xff] & 0x00ff0000) ^						 (Te4[(t0 >>  8) & 0xff] & 0x0000ff00) ^						 (Te4[(t1      ) & 0xff] & 0x000000ff) ^						 rk[2];					 PUTU32(out +  8, s2);					 s3 =						 (Te4[(t3 >> 24)       ] & 0xff000000) ^						 (Te4[(t0 >> 16) & 0xff] & 0x00ff0000) ^						 (Te4[(t1 >>  8) & 0xff] & 0x0000ff00) ^						 (Te4[(t2      ) & 0xff] & 0x000000ff) ^						 rk[3];					 PUTU32(out + 12, s3);}void AES_decrypt(const unsigned char *in, unsigned char *out,				 const AES_KEY *key) {					 const u32 *rk;					 u32 s0, s1, s2, s3, t0, t1, t2, t3;#ifndef FULL_UNROLL					 int r;#endif /* ?FULL_UNROLL */					 assert(in && out && key);					 rk = key->rd_key;					 /*					 * map byte array block to cipher state					 * and add initial round key:					 */					 s0 = GETU32(in     ) ^ rk[0];					 s1 = GETU32(in +  4) ^ rk[1];					 s2 = GETU32(in +  8) ^ rk[2];					 s3 = GETU32(in + 12) ^ rk[3];#ifdef FULL_UNROLL					 /* round 1: */					 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4];					 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5];					 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6];					 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7];					 /* round 2: */					 s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8];					 s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9];					 s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10];					 s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11];					 /* round 3: */					 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12];					 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13];					 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14];					 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15];					 /* round 4: */					 s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16];					 s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17];					 s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18];					 s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19];					 /* round 5: */					 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20];					 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21];					 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22];					 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23];					 /* round 6: */					 s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24];					 s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25];					 s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26];					 s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27];					 /* round 7: */					 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28];					 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29];					 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30];					 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31];					 /* round 8: */					 s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32];					 s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33];					 s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34];					 s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35];					 /* round 9: */					 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36];					 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37];					 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38];					 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39];					 if (key->rounds > 10) {						 /* round 10: */						 s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40];						 s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41];						 s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42];						 s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43];						 /* round 11: */						 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44];						 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45];						 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46];						 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47];						 if (key->rounds > 12) {							 /* round 12: */							 s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >>  8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48];							 s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >>  8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49];							 s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >>  8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50];							 s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >>  8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51];							 /* round 13: */							 t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >>  8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52];							 t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >>  8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53];							 t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >>  8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54];							 t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >>  8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55];						 }					 }					 rk += key->rounds << 2;#else  /* !FULL_UNROLL */					 /*					 * Nr - 1 full rounds:					 */					 r = key->rounds >> 1;					 for (;;) {						 t0 =							 Td0[(s0 >> 24)       ] ^							 Td1[(s3 >> 16) & 0xff] ^							 Td2[(s2 >>  8) & 0xff] ^							 Td3[(s1      ) & 0xff] ^							 rk[4];						 t1 =							 Td0[(s1 >> 24)       ] ^							 Td1[(s0 >> 16) & 0xff] ^							 Td2[(s3 >>  8) & 0xff] ^							 Td3[(s2      ) & 0xff] ^							 rk[5];						 t2 =							 Td0[(s2 >> 24)       ] ^							 Td1[(s1 >> 16) & 0xff] ^							 Td2[(s0 >>  8) & 0xff] ^							 Td3[(s3      ) & 0xff] ^							 rk[6];						 t3 =							 Td0[(s3 >> 24)       ] ^							 Td1[(s2 >> 16) & 0xff] ^							 Td2[(s1 >>  8) & 0xff] ^							 Td3[(s0      ) & 0xff] ^							 rk[7];						 rk += 8;						 if (--r == 0) {							 break;						 }						 s0 =							 Td0[(t0 >> 24)       ] ^							 Td1[(t3 >> 16) & 0xff] ^							 Td2[(t2 >>  8) & 0xff] ^							 Td3[(t1      ) & 0xff] ^							 rk[0];						 s1 =							 Td0[(t1 >> 24)       ] ^							 Td1[(t0 >> 16) & 0xff] ^							 Td2[(t3 >>  8) & 0xff] ^							 Td3[(t2      ) & 0xff] ^							 rk[1];						 s2 =							 Td0[(t2 >> 24)       ] ^							 Td1[(t1 >> 16) & 0xff] ^							 Td2[(t0 >>  8) & 0xff] ^							 Td3[(t3      ) & 0xff] ^							 rk[2];						 s3 =							 Td0[(t3 >> 24)       ] ^							 Td1[(t2 >> 16) & 0xff] ^							 Td2[(t1 >>  8) & 0xff] ^							 Td3[(t0      ) & 0xff] ^							 rk[3];					 }#endif /* ?FULL_UNROLL */					 /*					 * apply last round and					 * map cipher state to byte array block:					 */					 s0 =						 (Td4[(t0 >> 24)       ] & 0xff000000) ^						 (Td4[(t3 >> 16) & 0xff] & 0x00ff0000) ^						 (Td4[(t2 >>  8) & 0xff] & 0x0000ff00) ^						 (Td4[(t1      ) & 0xff] & 0x000000ff) ^						 rk[0];					 PUTU32(out     , s0);					 s1 =						 (Td4[(t1 >> 24)       ] & 0xff000000) ^						 (Td4[(t0 >> 16) & 0xff] & 0x00ff0000) ^						 (Td4[(t3 >>  8) & 0xff] & 0x0000ff00) ^						 (Td4[(t2      ) & 0xff] & 0x000000ff) ^						 rk[1];					 PUTU32(out +  4, s1);					 s2 =						 (Td4[(t2 >> 24)       ] & 0xff000000) ^						 (Td4[(t1 >> 16) & 0xff] & 0x00ff0000) ^						 (Td4[(t0 >>  8) & 0xff] & 0x0000ff00) ^						 (Td4[(t3      ) & 0xff] & 0x000000ff) ^						 rk[2];					 PUTU32(out +  8, s2);					 s3 =						 (Td4[(t3 >> 24)       ] & 0xff000000) ^						 (Td4[(t2 >> 16) & 0xff] & 0x00ff0000) ^						 (Td4[(t1 >>  8) & 0xff] & 0x0000ff00) ^						 (Td4[(t0      ) & 0xff] & 0x000000ff) ^						 rk[3];					 PUTU32(out + 12, s3);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -