摘自网上一种AES加密,用C语言实现通过32字节密钥对16字节长度数据进行加密。

  1 #include <string.h>
  2 #include <stdio.h>
  3 #ifndef uint8
  4 #define uint8 unsigned char
  5 #endif
  6 #ifndef uint32
  7 #define uint32 unsigned long int
  8 #endif
  9 typedef struct
 10 {
 11 uint32 erk[64]; /* encryption round keys */
 12 uint32 drk[64]; /* decryption round keys */
 13 int nr; /* number of rounds */
 14 }
 15 aes_context;
 16 //#define TEST
 17
 18 /* uncomment the following line to use pre-computed tables */
 19 /* otherwise the tables will be generated at the first run */
 20
 21 /* #define FIXED_TABLES */
 22
 23 #ifndef FIXED_TABLES
 24
 25 /* forward S-box & tables */
 26
 27 uint32 FSb[256];
 28 uint32 FT0[256];
 29 uint32 FT1[256];
 30 uint32 FT2[256];
 31 uint32 FT3[256];
 32
 33 /* reverse S-box & tables */
 34
 35 uint32 RSb[256];
 36 uint32 RT0[256];
 37 uint32 RT1[256];
 38 uint32 RT2[256];
 39 uint32 RT3[256];
 40
 41 /* round constants */
 42
 43 uint32 RCON[10];
 44
 45 /* tables generation flag */
 46
 47 int do_init = 1;
 48
 49 /* tables generation routine */
 50
 51 #define ROTR8(x) ( ( ( x << 24 ) & 0xFFFFFFFF ) | \
 52 ((x & 0xFFFFFFFF) >> 8))
 53
 54 #define XTIME(x) ( ( x << 1 ) ^ ( ( x & 0x80 ) ? 0x1B : 0x00 ) )
 55 #define MUL(x,y) ( ( x && y ) ? pow[(log[x] + log[y]) % 255] : 0 )
 56
 57 void aes_gen_tables(void)
 58 {
 59 int i;
 60 uint8 x, y;
 61 uint8 pow[256];
 62 uint8 log[256];
 63
 64 /* compute pow and log tables over GF(2^8) */
 65
 66 for (i = 0, x = 1; i < 256; i++, x ^= XTIME(x))
 67 {
 68 pow[i] = x;
 69 log[x] = i;
 70 }
 71
 72 /* calculate the round constants */
 73
 74 for (i = 0, x = 1; i < 10; i++, x = XTIME(x))
 75 {
 76 RCON[i] = (uint32)x << 24;
 77 }
 78
 79 /* generate the forward and reverse S-boxes */
 80
 81 FSb[0x00] = 0x63;
 82 RSb[0x63] = 0x00;
 83
 84 for (i = 1; i < 256; i++)
 85 {
 86 x = pow[255 - log[i]];
 87
 88 y = x; y = (y << 1) | (y >> 7);
 89 x ^= y; y = (y << 1) | (y >> 7);
 90 x ^= y; y = (y << 1) | (y >> 7);
 91 x ^= y; y = (y << 1) | (y >> 7);
 92 x ^= y ^ 0x63;
 93
 94 FSb[i] = x;
 95 RSb[x] = i;
 96 }
 97
 98 /* generate the forward and reverse tables */
 99
100 for (i = 0; i < 256; i++)
101 {
102 x = (unsigned char)FSb[i]; y = XTIME(x);
103
104 FT0[i] = (uint32)(x ^ y) ^
105 ((uint32)x << 8) ^
106 ((uint32)x << 16) ^
107 ((uint32)y << 24);
108
109 FT0[i] &= 0xFFFFFFFF;
110
111 FT1[i] = ROTR8(FT0[i]);
112 FT2[i] = ROTR8(FT1[i]);
113 FT3[i] = ROTR8(FT2[i]);
114
115 y = (unsigned char)RSb[i];
116
117 RT0[i] = ((uint32)MUL(0x0B, y)) ^
118 ((uint32)MUL(0x0D, y) << 8) ^
119 ((uint32)MUL(0x09, y) << 16) ^
120 ((uint32)MUL(0x0E, y) << 24);
121
122 RT0[i] &= 0xFFFFFFFF;
123
124 RT1[i] = ROTR8(RT0[i]);
125 RT2[i] = ROTR8(RT1[i]);
126 RT3[i] = ROTR8(RT2[i]);
127 }
128 }
129
130 #else
131
132 /* forward S-box */
133
134 static const uint32 FSb[256] =
135 {
136 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
137 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
138 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
139 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
140 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
141 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
142 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
143 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
144 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
145 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
146 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
147 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
148 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
149 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
150 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
151 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
152 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
153 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
154 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
155 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
156 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
157 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
158 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
159 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
160 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
161 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
162 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
163 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
164 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
165 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
166 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
167 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
168 };
169
170 /* forward tables */
171
172 #define FT \
173 \
174 V(C6, 63, 63, A5), V(F8, 7C, 7C, 84), V(EE, 77, 77, 99), V(F6, 7B, 7B, 8D), \
175 V(FF, F2, F2, 0D), V(D6, 6B, 6B, BD), V(DE, 6F, 6F, B1), V(91, C5, C5, 54), \
176 V(60, 30, 30, 50), V(02, 01, 01, 03), V(CE, 67, 67, A9), V(56, 2B, 2B, 7D), \
177 V(E7, FE, FE, 19), V(B5, D7, D7, 62), V(4D, AB, AB, E6), V(EC, 76, 76, 9A), \
178 V(8F, CA, CA, 45), V(1F, 82, 82, 9D), V(89, C9, C9, 40), V(FA, 7D, 7D, 87), \
179 V(EF, FA, FA, 15), V(B2, 59, 59, EB), V(8E, 47, 47, C9), V(FB, F0, F0, 0B), \
180 V(41, AD, AD, EC), V(B3, D4, D4, 67), V(5F, A2, A2, FD), V(45, AF, AF, EA), \
181 V(23, 9C, 9C, BF), V(53, A4, A4, F7), V(E4, 72, 72, 96), V(9B, C0, C0, 5B), \
182 V(75, B7, B7, C2), V(E1, FD, FD, 1C), V(3D, 93, 93, AE), V(4C, 26, 26, 6A), \
183 V(6C, 36, 36, 5A), V(7E, 3F, 3F, 41), V(F5, F7, F7, 02), V(83, CC, CC, 4F), \
184 V(68, 34, 34, 5C), V(51, A5, A5, F4), V(D1, E5, E5, 34), V(F9, F1, F1, 08), \
185 V(E2, 71, 71, 93), V(AB, D8, D8, 73), V(62, 31, 31, 53), V(2A, 15, 15, 3F), \
186 V(08, 04, 04, 0C), V(95, C7, C7, 52), V(46, 23, 23, 65), V(9D, C3, C3, 5E), \
187 V(30, 18, 18, 28), V(37, 96, 96, A1), V(0A, 05, 05, 0F), V(2F, 9A, 9A, B5), \
188 V(0E, 07, 07, 09), V(24, 12, 12, 36), V(1B, 80, 80, 9B), V(DF, E2, E2, 3D), \
189 V(CD, EB, EB, 26), V(4E, 27, 27, 69), V(7F, B2, B2, CD), V(EA, 75, 75, 9F), \
190 V(12, 09, 09, 1B), V(1D, 83, 83, 9E), V(58, 2C, 2C, 74), V(34, 1A, 1A, 2E), \
191 V(36, 1B, 1B, 2D), V(DC, 6E, 6E, B2), V(B4, 5A, 5A, EE), V(5B, A0, A0, FB), \
192 V(A4, 52, 52, F6), V(76, 3B, 3B, 4D), V(B7, D6, D6, 61), V(7D, B3, B3, CE), \
193 V(52, 29, 29, 7B), V(DD, E3, E3, 3E), V(5E, 2F, 2F, 71), V(13, 84, 84, 97), \
194 V(A6, 53, 53, F5), V(B9, D1, D1, 68), V(00, 00, 00, 00), V(C1, ED, ED, 2C), \
195 V(40, 20, 20, 60), V(E3, FC, FC, 1F), V(79, B1, B1, C8), V(B6, 5B, 5B, ED), \
196 V(D4, 6A, 6A, BE), V(8D, CB, CB, 46), V(67, BE, BE, D9), V(72, 39, 39, 4B), \
197 V(94, 4A, 4A, DE), V(98, 4C, 4C, D4), V(B0, 58, 58, E8), V(85, CF, CF, 4A), \
198 V(BB, D0, D0, 6B), V(C5, EF, EF, 2A), V(4F, AA, AA, E5), V(ED, FB, FB, 16), \
199 V(86, 43, 43, C5), V(9A, 4D, 4D, D7), V(66, 33, 33, 55), V(11, 85, 85, 94), \
200 V(8A, 45, 45, CF), V(E9, F9, F9, 10), V(04, 02, 02, 06), V(FE, 7F, 7F, 81), \
201 V(A0, 50, 50, F0), V(78, 3C, 3C, 44), V(25, 9F, 9F, BA), V(4B, A8, A8, E3), \
202 V(A2, 51, 51, F3), V(5D, A3, A3, FE), V(80, 40, 40, C0), V(05, 8F, 8F, 8A), \
203 V(3F, 92, 92, AD), V(21, 9D, 9D, BC), V(70, 38, 38, 48), V(F1, F5, F5, 04), \
204 V(63, BC, BC, DF), V(77, B6, B6, C1), V(AF, DA, DA, 75), V(42, 21, 21, 63), \
205 V(20, 10, 10, 30), V(E5, FF, FF, 1A), V(FD, F3, F3, 0E), V(BF, D2, D2, 6D), \
206 V(81, CD, CD, 4C), V(18, 0C, 0C, 14), V(26, 13, 13, 35), V(C3, EC, EC, 2F), \
207 V(BE, 5F, 5F, E1), V(35, 97, 97, A2), V(88, 44, 44, CC), V(2E, 17, 17, 39), \
208 V(93, C4, C4, 57), V(55, A7, A7, F2), V(FC, 7E, 7E, 82), V(7A, 3D, 3D, 47), \
209 V(C8, 64, 64, AC), V(BA, 5D, 5D, E7), V(32, 19, 19, 2B), V(E6, 73, 73, 95), \
210 V(C0, 60, 60, A0), V(19, 81, 81, 98), V(9E, 4F, 4F, D1), V(A3, DC, DC, 7F), \
211 V(44, 22, 22, 66), V(54, 2A, 2A, 7E), V(3B, 90, 90, AB), V(0B, 88, 88, 83), \
212 V(8C, 46, 46, CA), V(C7, EE, EE, 29), V(6B, B8, B8, D3), V(28, 14, 14, 3C), \
213 V(A7, DE, DE, 79), V(BC, 5E, 5E, E2), V(16, 0B, 0B, 1D), V(AD, DB, DB, 76), \
214 V(DB, E0, E0, 3B), V(64, 32, 32, 56), V(74, 3A, 3A, 4E), V(14, 0A, 0A, 1E), \
215 V(92, 49, 49, DB), V(0C, 06, 06, 0A), V(48, 24, 24, 6C), V(B8, 5C, 5C, E4), \
216 V(9F, C2, C2, 5D), V(BD, D3, D3, 6E), V(43, AC, AC, EF), V(C4, 62, 62, A6), \
217 V(39, 91, 91, A8), V(31, 95, 95, A4), V(D3, E4, E4, 37), V(F2, 79, 79, 8B), \
218 V(D5, E7, E7, 32), V(8B, C8, C8, 43), V(6E, 37, 37, 59), V(DA, 6D, 6D, B7), \
219 V(01, 8D, 8D, 8C), V(B1, D5, D5, 64), V(9C, 4E, 4E, D2), V(49, A9, A9, E0), \
220 V(D8, 6C, 6C, B4), V(AC, 56, 56, FA), V(F3, F4, F4, 07), V(CF, EA, EA, 25), \
221 V(CA, 65, 65, AF), V(F4, 7A, 7A, 8E), V(47, AE, AE, E9), V(10, 08, 08, 18), \
222 V(6F, BA, BA, D5), V(F0, 78, 78, 88), V(4A, 25, 25, 6F), V(5C, 2E, 2E, 72), \
223 V(38, 1C, 1C, 24), V(57, A6, A6, F1), V(73, B4, B4, C7), V(97, C6, C6, 51), \
224 V(CB, E8, E8, 23), V(A1, DD, DD, 7C), V(E8, 74, 74, 9C), V(3E, 1F, 1F, 21), \
225 V(96, 4B, 4B, DD), V(61, BD, BD, DC), V(0D, 8B, 8B, 86), V(0F, 8A, 8A, 85), \
226 V(E0, 70, 70, 90), V(7C, 3E, 3E, 42), V(71, B5, B5, C4), V(CC, 66, 66, AA), \
227 V(90, 48, 48, D8), V(06, 03, 03, 05), V(F7, F6, F6, 01), V(1C, 0E, 0E, 12), \
228 V(C2, 61, 61, A3), V(6A, 35, 35, 5F), V(AE, 57, 57, F9), V(69, B9, B9, D0), \
229 V(17, 86, 86, 91), V(99, C1, C1, 58), V(3A, 1D, 1D, 27), V(27, 9E, 9E, B9), \
230 V(D9, E1, E1, 38), V(EB, F8, F8, 13), V(2B, 98, 98, B3), V(22, 11, 11, 33), \
231 V(D2, 69, 69, BB), V(A9, D9, D9, 70), V(07, 8E, 8E, 89), V(33, 94, 94, A7), \
232 V(2D, 9B, 9B, B6), V(3C, 1E, 1E, 22), V(15, 87, 87, 92), V(C9, E9, E9, 20), \
233 V(87, CE, CE, 49), V(AA, 55, 55, FF), V(50, 28, 28, 78), V(A5, DF, DF, 7A), \
234 V(03, 8C, 8C, 8F), V(59, A1, A1, F8), V(09, 89, 89, 80), V(1A, 0D, 0D, 17), \
235 V(65, BF, BF, DA), V(D7, E6, E6, 31), V(84, 42, 42, C6), V(D0, 68, 68, B8), \
236 V(82, 41, 41, C3), V(29, 99, 99, B0), V(5A, 2D, 2D, 77), V(1E, 0F, 0F, 11), \
237 V(7B, B0, B0, CB), V(A8, 54, 54, FC), V(6D, BB, BB, D6), V(2C, 16, 16, 3A)
238
239 #define V(a,b,c,d) 0x##a##b##c##d
240 static const uint32 FT0[256] = { FT };
241 #undef V
242
243 #define V(a,b,c,d) 0x##d##a##b##c
244 static const uint32 FT1[256] = { FT };
245 #undef V
246
247 #define V(a,b,c,d) 0x##c##d##a##b
248 static const uint32 FT2[256] = { FT };
249 #undef V
250
251 #define V(a,b,c,d) 0x##b##c##d##a
252 static const uint32 FT3[256] = { FT };
253 #undef V
254
255 #undef FT
256
257 /* reverse S-box */
258
259 static const uint32 RSb[256] =
260 {
261 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
262 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
263 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
264 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
265 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
266 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
267 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
268 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
269 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
270 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
271 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
272 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
273 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
274 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
275 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
276 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
277 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
278 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
279 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
280 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
281 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
282 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
283 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
284 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
285 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
286 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
287 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
288 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
289 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
290 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
291 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
292 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
293 };
294
295 /* reverse tables */
296
297 #define RT \
298 \
299 V(51, F4, A7, 50), V(7E, 41, 65, 53), V(1A, 17, A4, C3), V(3A, 27, 5E, 96), \
300 V(3B, AB, 6B, CB), V(1F, 9D, 45, F1), V(AC, FA, 58, AB), V(4B, E3, 03, 93), \
301 V(20, 30, FA, 55), V(AD, 76, 6D, F6), V(88, CC, 76, 91), V(F5, 02, 4C, 25), \
302 V(4F, E5, D7, FC), V(C5, 2A, CB, D7), V(26, 35, 44, 80), V(B5, 62, A3, 8F), \
303 V(DE, B1, 5A, 49), V(25, BA, 1B, 67), V(45, EA, 0E, 98), V(5D, FE, C0, E1), \
304 V(C3, 2F, 75, 02), V(81, 4C, F0, 12), V(8D, 46, 97, A3), V(6B, D3, F9, C6), \
305 V(03, 8F, 5F, E7), V(15, 92, 9C, 95), V(BF, 6D, 7A, EB), V(95, 52, 59, DA), \
306 V(D4, BE, 83, 2D), V(58, 74, 21, D3), V(49, E0, 69, 29), V(8E, C9, C8, 44), \
307 V(75, C2, 89, 6A), V(F4, 8E, 79, 78), V(99, 58, 3E, 6B), V(27, B9, 71, DD), \
308 V(BE, E1, 4F, B6), V(F0, 88, AD, 17), V(C9, 20, AC, 66), V(7D, CE, 3A, B4), \
309 V(63, DF, 4A, 18), V(E5, 1A, 31, 82), V(97, 51, 33, 60), V(62, 53, 7F, 45), \
310 V(B1, 64, 77, E0), V(BB, 6B, AE, 84), V(FE, 81, A0, 1C), V(F9, 08, 2B, 94), \
311 V(70, 48, 68, 58), V(8F, 45, FD, 19), V(94, DE, 6C, 87), V(52, 7B, F8, B7), \
312 V(AB, 73, D3, 23), V(72, 4B, 02, E2), V(E3, 1F, 8F, 57), V(66, 55, AB, 2A), \
313 V(B2, EB, 28, 07), V(2F, B5, C2, 03), V(86, C5, 7B, 9A), V(D3, 37, 08, A5), \
314 V(30, 28, 87, F2), V(23, BF, A5, B2), V(02, 03, 6A, BA), V(ED, 16, 82, 5C), \
315 V(8A, CF, 1C, 2B), V(A7, 79, B4, 92), V(F3, 07, F2, F0), V(4E, 69, E2, A1), \
316 V(65, DA, F4, CD), V(06, 05, BE, D5), V(D1, 34, 62, 1F), V(C4, A6, FE, 8A), \
317 V(34, 2E, 53, 9D), V(A2, F3, 55, A0), V(05, 8A, E1, 32), V(A4, F6, EB, 75), \
318 V(0B, 83, EC, 39), V(40, 60, EF, AA), V(5E, 71, 9F, 06), V(BD, 6E, 10, 51), \
319 V(3E, 21, 8A, F9), V(96, DD, 06, 3D), V(DD, 3E, 05, AE), V(4D, E6, BD, 46), \
320 V(91, 54, 8D, B5), V(71, C4, 5D, 05), V(04, 06, D4, 6F), V(60, 50, 15, FF), \
321 V(19, 98, FB, 24), V(D6, BD, E9, 97), V(89, 40, 43, CC), V(67, D9, 9E, 77), \
322 V(B0, E8, 42, BD), V(07, 89, 8B, 88), V(E7, 19, 5B, 38), V(79, C8, EE, DB), \
323 V(A1, 7C, 0A, 47), V(7C, 42, 0F, E9), V(F8, 84, 1E, C9), V(00, 00, 00, 00), \
324 V(09, 80, 86, 83), V(32, 2B, ED, 48), V(1E, 11, 70, AC), V(6C, 5A, 72, 4E), \
325 V(FD, 0E, FF, FB), V(0F, 85, 38, 56), V(3D, AE, D5, 1E), V(36, 2D, 39, 27), \
326 V(0A, 0F, D9, 64), V(68, 5C, A6, 21), V(9B, 5B, 54, D1), V(24, 36, 2E, 3A), \
327 V(0C, 0A, 67, B1), V(93, 57, E7, 0F), V(B4, EE, 96, D2), V(1B, 9B, 91, 9E), \
328 V(80, C0, C5, 4F), V(61, DC, 20, A2), V(5A, 77, 4B, 69), V(1C, 12, 1A, 16), \
329 V(E2, 93, BA, 0A), V(C0, A0, 2A, E5), V(3C, 22, E0, 43), V(12, 1B, 17, 1D), \
330 V(0E, 09, 0D, 0B), V(F2, 8B, C7, AD), V(2D, B6, A8, B9), V(14, 1E, A9, C8), \
331 V(57, F1, 19, 85), V(AF, 75, 07, 4C), V(EE, 99, DD, BB), V(A3, 7F, 60, FD), \
332 V(F7, 01, 26, 9F), V(5C, 72, F5, BC), V(44, 66, 3B, C5), V(5B, FB, 7E, 34), \
333 V(8B, 43, 29, 76), V(CB, 23, C6, DC), V(B6, ED, FC, 68), V(B8, E4, F1, 63), \
334 V(D7, 31, DC, CA), V(42, 63, 85, 10), V(13, 97, 22, 40), V(84, C6, 11, 20), \
335 V(85, 4A, 24, 7D), V(D2, BB, 3D, F8), V(AE, F9, 32, 11), V(C7, 29, A1, 6D), \
336 V(1D, 9E, 2F, 4B), V(DC, B2, 30, F3), V(0D, 86, 52, EC), V(77, C1, E3, D0), \
337 V(2B, B3, 16, 6C), V(A9, 70, B9, 99), V(11, 94, 48, FA), V(47, E9, 64, 22), \
338 V(A8, FC, 8C, C4), V(A0, F0, 3F, 1A), V(56, 7D, 2C, D8), V(22, 33, 90, EF), \
339 V(87, 49, 4E, C7), V(D9, 38, D1, C1), V(8C, CA, A2, FE), V(98, D4, 0B, 36), \
340 V(A6, F5, 81, CF), V(A5, 7A, DE, 28), V(DA, B7, 8E, 26), V(3F, AD, BF, A4), \
341 V(2C, 3A, 9D, E4), V(50, 78, 92, 0D), V(6A, 5F, CC, 9B), V(54, 7E, 46, 62), \
342 V(F6, 8D, 13, C2), V(90, D8, B8, E8), V(2E, 39, F7, 5E), V(82, C3, AF, F5), \
343 V(9F, 5D, 80, BE), V(69, D0, 93, 7C), V(6F, D5, 2D, A9), V(CF, 25, 12, B3), \
344 V(C8, AC, 99, 3B), V(10, 18, 7D, A7), V(E8, 9C, 63, 6E), V(DB, 3B, BB, 7B), \
345 V(CD, 26, 78, 09), V(6E, 59, 18, F4), V(EC, 9A, B7, 01), V(83, 4F, 9A, A8), \
346 V(E6, 95, 6E, 65), V(AA, FF, E6, 7E), V(21, BC, CF, 08), V(EF, 15, E8, E6), \
347 V(BA, E7, 9B, D9), V(4A, 6F, 36, CE), V(EA, 9F, 09, D4), V(29, B0, 7C, D6), \
348 V(31, A4, B2, AF), V(2A, 3F, 23, 31), V(C6, A5, 94, 30), V(35, A2, 66, C0), \
349 V(74, 4E, BC, 37), V(FC, 82, CA, A6), V(E0, 90, D0, B0), V(33, A7, D8, 15), \
350 V(F1, 04, 98, 4A), V(41, EC, DA, F7), V(7F, CD, 50, 0E), V(17, 91, F6, 2F), \
351 V(76, 4D, D6, 8D), V(43, EF, B0, 4D), V(CC, AA, 4D, 54), V(E4, 96, 04, DF), \
352 V(9E, D1, B5, E3), V(4C, 6A, 88, 1B), V(C1, 2C, 1F, B8), V(46, 65, 51, 7F), \
353 V(9D, 5E, EA, 04), V(01, 8C, 35, 5D), V(FA, 87, 74, 73), V(FB, 0B, 41, 2E), \
354 V(B3, 67, 1D, 5A), V(92, DB, D2, 52), V(E9, 10, 56, 33), V(6D, D6, 47, 13), \
355 V(9A, D7, 61, 8C), V(37, A1, 0C, 7A), V(59, F8, 14, 8E), V(EB, 13, 3C, 89), \
356 V(CE, A9, 27, EE), V(B7, 61, C9, 35), V(E1, 1C, E5, ED), V(7A, 47, B1, 3C), \
357 V(9C, D2, DF, 59), V(55, F2, 73, 3F), V(18, 14, CE, 79), V(73, C7, 37, BF), \
358 V(53, F7, CD, EA), V(5F, FD, AA, 5B), V(DF, 3D, 6F, 14), V(78, 44, DB, 86), \
359 V(CA, AF, F3, 81), V(B9, 68, C4, 3E), V(38, 24, 34, 2C), V(C2, A3, 40, 5F), \
360 V(16, 1D, C3, 72), V(BC, E2, 25, 0C), V(28, 3C, 49, 8B), V(FF, 0D, 95, 41), \
361 V(39, A8, 01, 71), V(08, 0C, B3, DE), V(D8, B4, E4, 9C), V(64, 56, C1, 90), \
362 V(7B, CB, 84, 61), V(D5, 32, B6, 70), V(48, 6C, 5C, 74), V(D0, B8, 57, 42)
363
364 #define V(a,b,c,d) 0x##a##b##c##d
365 static const uint32 RT0[256] = { RT };
366 #undef V
367
368 #define V(a,b,c,d) 0x##d##a##b##c
369 static const uint32 RT1[256] = { RT };
370 #undef V
371
372 #define V(a,b,c,d) 0x##c##d##a##b
373 static const uint32 RT2[256] = { RT };
374 #undef V
375
376 #define V(a,b,c,d) 0x##b##c##d##a
377 static const uint32 RT3[256] = { RT };
378 #undef V
379
380 #undef RT
381
382 /* round constants */
383
384 static const uint32 RCON[10] =
385 {
386 0x01000000, 0x02000000, 0x04000000, 0x08000000,
387 0x10000000, 0x20000000, 0x40000000, 0x80000000,
388 0x1B000000, 0x36000000
389 };
390
391 int do_init = 0;
392
393 void aes_gen_tables(void)
394 {
395 }
396
397 #endif
398
399 /* platform-independant 32-bit integer manipulation macros */
400
401 #define GET_UINT32(n,b,i) \
402 { \
403 (n) = ((uint32)(b)[(i)] << 24) \
404 | ((uint32)(b)[(i)+1] << 16) \
405 | ((uint32)(b)[(i)+2] << 8) \
406 | ((uint32)(b)[(i)+3]); \
407 }
408
409 #define PUT_UINT32(n,b,i) \
410 { \
411 (b)[(i)] = (uint8)((n) >> 24); \
412 (b)[(i)+1] = (uint8)((n) >> 16); \
413 (b)[(i)+2] = (uint8)((n) >> 8); \
414 (b)[(i)+3] = (uint8)((n)); \
415 }
416
417 /* decryption key schedule tables */
418
419 int KT_init = 1;
420
421 uint32 KT0[256];
422 uint32 KT1[256];
423 uint32 KT2[256];
424 uint32 KT3[256];
425
426 /* AES key scheduling routine */
427
428 int aes_set_key(aes_context *ctx, uint8 *key)
429 {
430 int i;
431 uint32 *RK, *SK;
432
433 if (do_init)
434 {
435 aes_gen_tables();
436
437 do_init = 0;
438 }
439 ctx->nr = 14;
440 /*switch( nbits )
441 {
442 case 128: ctx->nr = 10; break;
443 case 192: ctx->nr = 12; break;
444 case 256: ctx->nr = 14; break;
445 default : return( 1 );
446 }*/
447
448 RK = ctx->erk;
449
450 for (i = 0; i < 8; i++)
451 {
452 GET_UINT32(RK[i], key, i * 4);
453 }
454 for (i = 0; i < 7; i++, RK += 8)
455 {
456 RK[8] = RK[0] ^ RCON[i] ^
457 (FSb[(uint8)(RK[7] >> 16)] << 24) ^
458 (FSb[(uint8)(RK[7] >> 8)] << 16) ^
459 (FSb[(uint8)(RK[7])] << 8) ^
460 (FSb[(uint8)(RK[7] >> 24)]);
461
462 RK[9] = RK[1] ^ RK[8];
463 RK[10] = RK[2] ^ RK[9];
464 RK[11] = RK[3] ^ RK[10];
465
466 RK[12] = RK[4] ^
467 (FSb[(uint8)(RK[11] >> 24)] << 24) ^
468 (FSb[(uint8)(RK[11] >> 16)] << 16) ^
469 (FSb[(uint8)(RK[11] >> 8)] << 8) ^
470 (FSb[(uint8)(RK[11])]);
471
472 RK[13] = RK[5] ^ RK[12];
473 RK[14] = RK[6] ^ RK[13];
474 RK[15] = RK[7] ^ RK[14];
475 }
476
477 /* setup decryption round keys */
478
479 if (KT_init)
480 {
481 for (i = 0; i < 256; i++)
482 {
483 KT0[i] = RT0[FSb[i]];
484 KT1[i] = RT1[FSb[i]];
485 KT2[i] = RT2[FSb[i]];
486 KT3[i] = RT3[FSb[i]];
487 }
488
489 KT_init = 0;
490 }
491
492 SK = ctx->drk;
493
494 *SK++ = *RK++;
495 *SK++ = *RK++;
496 *SK++ = *RK++;
497 *SK++ = *RK++;
498
499 for (i = 1; i < 14; i++)
500 {
501 RK -= 8;
502
503 *SK++ = KT0[(uint8)(*RK >> 24)] ^
504 KT1[(uint8)(*RK >> 16)] ^
505 KT2[(uint8)(*RK >> 8)] ^
506 KT3[(uint8)(*RK)]; RK++;
507
508 *SK++ = KT0[(uint8)(*RK >> 24)] ^
509 KT1[(uint8)(*RK >> 16)] ^
510 KT2[(uint8)(*RK >> 8)] ^
511 KT3[(uint8)(*RK)]; RK++;
512
513 *SK++ = KT0[(uint8)(*RK >> 24)] ^
514 KT1[(uint8)(*RK >> 16)] ^
515 KT2[(uint8)(*RK >> 8)] ^
516 KT3[(uint8)(*RK)]; RK++;
517
518 *SK++ = KT0[(uint8)(*RK >> 24)] ^
519 KT1[(uint8)(*RK >> 16)] ^
520 KT2[(uint8)(*RK >> 8)] ^
521 KT3[(uint8)(*RK)]; RK++;
522 }
523
524 RK -= 8;
525
526 *SK++ = *RK++;
527 *SK++ = *RK++;
528 *SK++ = *RK++;
529 *SK++ = *RK++;
530
531 return(0);
532 }
533
534 /* AES 256-bit block encryption routine */
535
536 void aes_encrypt(aes_context *ctx, uint8 input[16], uint8 output[16])
537 {
538 uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
539
540 RK = ctx->erk;
541
542 GET_UINT32(X0, input, 0); X0 ^= RK[0];
543 GET_UINT32(X1, input, 4); X1 ^= RK[1];
544 GET_UINT32(X2, input, 8); X2 ^= RK[2];
545 GET_UINT32(X3, input, 12); X3 ^= RK[3];
546
547 #define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
548 { \
549 RK += 4; \
550 \
551 X0 = RK[0] ^ FT0[(uint8)(Y0 >> 24)] ^ \
552 FT1[(uint8)(Y1 >> 16)] ^ \
553 FT2[(uint8)(Y2 >> 8)] ^ \
554 FT3[(uint8)(Y3)]; \
555 \
556 X1 = RK[1] ^ FT0[(uint8)(Y1 >> 24)] ^ \
557 FT1[(uint8)(Y2 >> 16)] ^ \
558 FT2[(uint8)(Y3 >> 8)] ^ \
559 FT3[(uint8)(Y0)]; \
560 \
561 X2 = RK[2] ^ FT0[(uint8)(Y2 >> 24)] ^ \
562 FT1[(uint8)(Y3 >> 16)] ^ \
563 FT2[(uint8)(Y0 >> 8)] ^ \
564 FT3[(uint8)(Y1)]; \
565 \
566 X3 = RK[3] ^ FT0[(uint8)(Y3 >> 24)] ^ \
567 FT1[(uint8)(Y0 >> 16)] ^ \
568 FT2[(uint8)(Y1 >> 8)] ^ \
569 FT3[(uint8)(Y2)]; \
570 }
571
572 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */
573 AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */
574 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */
575 AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */
576 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */
577 AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */
578 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */
579 AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */
580 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */
581
582 // if( ctx->nr > 10 )
583 //{584 AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */
585 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */
586 //}
587 AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */
588 AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */
589
590
591 /* last round */
592
593 RK += 4;
594
595 X0 = RK[0] ^ (FSb[(uint8)(Y0 >> 24)] << 24) ^
596 (FSb[(uint8)(Y1 >> 16)] << 16) ^
597 (FSb[(uint8)(Y2 >> 8)] << 8) ^
598 (FSb[(uint8)(Y3)]);
599
600 X1 = RK[1] ^ (FSb[(uint8)(Y1 >> 24)] << 24) ^
601 (FSb[(uint8)(Y2 >> 16)] << 16) ^
602 (FSb[(uint8)(Y3 >> 8)] << 8) ^
603 (FSb[(uint8)(Y0)]);
604
605 X2 = RK[2] ^ (FSb[(uint8)(Y2 >> 24)] << 24) ^
606 (FSb[(uint8)(Y3 >> 16)] << 16) ^
607 (FSb[(uint8)(Y0 >> 8)] << 8) ^
608 (FSb[(uint8)(Y1)]);
609
610 X3 = RK[3] ^ (FSb[(uint8)(Y3 >> 24)] << 24) ^
611 (FSb[(uint8)(Y0 >> 16)] << 16) ^
612 (FSb[(uint8)(Y1 >> 8)] << 8) ^
613 (FSb[(uint8)(Y2)]);
614
615 PUT_UINT32(X0, output, 0);
616 PUT_UINT32(X1, output, 4);
617 PUT_UINT32(X2, output, 8);
618 PUT_UINT32(X3, output, 12);
619 }
620
621 /* AES 256-bit block decryption routine */
622
623 void aes_decrypt(aes_context *ctx, uint8 input[16], uint8 output[16])
624 {
625 uint32 *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3;
626
627 RK = ctx->drk;
628
629 GET_UINT32(X0, input, 0); X0 ^= RK[0];
630 GET_UINT32(X1, input, 4); X1 ^= RK[1];
631 GET_UINT32(X2, input, 8); X2 ^= RK[2];
632 GET_UINT32(X3, input, 12); X3 ^= RK[3];
633
634 #define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
635 { \
636 RK += 4; \
637 \
638 X0 = RK[0] ^ RT0[(uint8)(Y0 >> 24)] ^ \
639 RT1[(uint8)(Y3 >> 16)] ^ \
640 RT2[(uint8)(Y2 >> 8)] ^ \
641 RT3[(uint8)(Y1)]; \
642 \
643 X1 = RK[1] ^ RT0[(uint8)(Y1 >> 24)] ^ \
644 RT1[(uint8)(Y0 >> 16)] ^ \
645 RT2[(uint8)(Y3 >> 8)] ^ \
646 RT3[(uint8)(Y2)]; \
647 \
648 X2 = RK[2] ^ RT0[(uint8)(Y2 >> 24)] ^ \
649 RT1[(uint8)(Y1 >> 16)] ^ \
650 RT2[(uint8)(Y0 >> 8)] ^ \
651 RT3[(uint8)(Y3)]; \
652 \
653 X3 = RK[3] ^ RT0[(uint8)(Y3 >> 24)] ^ \
654 RT1[(uint8)(Y2 >> 16)] ^ \
655 RT2[(uint8)(Y1 >> 8)] ^ \
656 RT3[(uint8)(Y0)]; \
657 }
658
659 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 1 */
660 AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 2 */
661 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 3 */
662 AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 4 */
663 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 5 */
664 AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 6 */
665 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 7 */
666 AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 8 */
667 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 9 */
668
669 // if( ctx->nr > 10 )
670 //{671 AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 10 */
672 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 11 */
673 //}
674 AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); /* round 12 */
675 AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); /* round 13 */
676
677
678 /* last round */
679
680 RK += 4;
681
682 X0 = RK[0] ^ (RSb[(uint8)(Y0 >> 24)] << 24) ^
683 (RSb[(uint8)(Y3 >> 16)] << 16) ^
684 (RSb[(uint8)(Y2 >> 8)] << 8) ^
685 (RSb[(uint8)(Y1)]);
686
687 X1 = RK[1] ^ (RSb[(uint8)(Y1 >> 24)] << 24) ^
688 (RSb[(uint8)(Y0 >> 16)] << 16) ^
689 (RSb[(uint8)(Y3 >> 8)] << 8) ^
690 (RSb[(uint8)(Y2)]);
691
692 X2 = RK[2] ^ (RSb[(uint8)(Y2 >> 24)] << 24) ^
693 (RSb[(uint8)(Y1 >> 16)] << 16) ^
694 (RSb[(uint8)(Y0 >> 8)] << 8) ^
695 (RSb[(uint8)(Y3)]);
696
697 X3 = RK[3] ^ (RSb[(uint8)(Y3 >> 24)] << 24) ^
698 (RSb[(uint8)(Y2 >> 16)] << 16) ^
699 (RSb[(uint8)(Y1 >> 8)] << 8) ^
700 (RSb[(uint8)(Y0)]);
701
702 PUT_UINT32(X0, output, 0);
703 PUT_UINT32(X1, output, 4);
704 PUT_UINT32(X2, output, 8);
705 PUT_UINT32(X3, output, 12);
706 }
707 /*
708 传进参数:密钥;加密字符串;密文存储文件
709 密钥会被自动填充或者截取为32字节
710 */
711 void AES(unsigned char *key, unsigned char *buf, FILE *fp)
712 {
713 aes_context ctx;
714 char *keytemp;
715 //密钥拓展成32字节
716 for (int i=0,j=0; i<32; i++)
717 {
718 if (key[i] != 0)
719 {
720 keytemp[i] = key[i];
721 j++;
722 }
723 else{
724 keytemp[i] = key[i%j];
725 }
726 }
727 printf("拓展后的密钥:", keytemp);
728 aes_set_key(&ctx, keytemp);
729 for (int k = 1; buf != '\0'; k++)
730 {
731 if (k%8==0)
732 aes_encrypt(&ctx, buf, buf);
733 }
734 }
735 int main(void)
736 {
737 //int m, n, i, j;
738 int i;
739 //char c;
740 aes_context ctx;
741 unsigned char buf[16];
742 unsigned char key[32] = { 'f', 'e', 'f', '2', 'f', 'e', 'g', 'h', 'b', 'v', 'c', 'x', 'z', 'q', 'e', 'w', 'f', 'e', 'f', '2', 'f', 'e', 'g', 'h', 'f', 'e', 'f', '2', 'f', 'e', 'g', 'h' };
743 printf("输入32个字符作为秘钥\n");
744 scanf("%s",key);
745 printf(key);
746 printf("输入加密数据\n");
747 scanf("%s", buf);
748 aes_set_key(&ctx, key);
749 /*    for (i = 0; i<16; i++)
750 {
751 buf[i] = 'd';
752 }*/
753 printf("the data to encrypt:\n");
754 for (i = 0; i<16; i++)
755 {
756 printf("%02x ", buf[i]);
757 }
758 printf("\n");
759
760 getchar();
761 aes_encrypt(&ctx, buf, buf);
762 printf("The encrypted data is:\n");
763 for (i = 0; i<16; i++)
764 {
765 printf("%02x ", buf[i]);
766 }
767 printf("\n");
768 printf("\n");
769
770
771 // aes_set_key( &ctx, key, 128 + n * 64 );
772 aes_decrypt(&ctx, buf, buf);
773 printf("The decrypted data is:\n");
774 for (i = 0; i<16; i++)
775 {
776 printf("%02x ", buf[i]);
777 }
778 printf("\n");
779 getchar();
780 return 0;
781
782 }
783
784 //#endif

AES C Code

转载于:https://www.cnblogs.com/starf/p/3657747.html

AES加密的C语言实现相关推荐

  1. 记一次Python与C#的AES加密对接

    前言 这几天做自动化测试的同事找到我,说是帮她看看有个AES加密的问题要怎么处理. 大概就是文档中贴了一段C#的AES加密代码,然后她要翻译成python的版本,去做一些测试相关的工作. 在我印象中, ...

  2. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  3. aes子密钥生成c语言_HBase配置AES加密

    特别说明:该专栏文章均来源自微信公众号<大数据实战演练>,欢迎关注! 版本: HDP:3.0.1.0 HBase:2.0.0 一.前言 为了避免第三方非法访问我们的重要数据,我们可以给HB ...

  4. C语言实现AES加密解密

    AES加密是美国联邦政府采用的一种块加密标准,如今已经被全世界广为使用.嵌入式开发中我们也经常会用到加密解密算法,如果没有硬件模块来实现,就需要用到C代码软件实现.下面介绍调用mbedTLS中的AES ...

  5. 基于Modelsim的verilog语言设计AES加密解密(硬件电路HDL)

    全程手撕AES加密(verilog) 以下部分截图若涉及侵权,及时联系,随时撤销! 关于AES的原理我不多叙述,博客众多大佬比我厉害的多,该篇文章仅用来纪念自己的学习过程以及分享代码参考,毕竟有关这个 ...

  6. AES加密c语言实现

    #include <stdio.h> /*aes_small.c*/ //辅助矩阵 /*s盒矩阵:The AES Substitution Table*/// 256 位的密匙256 位支 ...

  7. AES加密 — 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120285594 本文出自[赵彦军的博客] 文章目录 推荐 AES 简介 对称加密 ...

  8. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

  9. python爬虫应用实例_Python爬虫进阶必备 | 一个典型的 AES 加密在爬虫中的应用案例...

    一个典型的AES案例 AES 的案例之前有推荐大家关于 AES 加密的案例文章,不少朋友问我加密解决了有什么用? 最大的用途当然就是不用模拟请求,大大提高了爬取效率. 可能之前举例都是使用的 AES ...

最新文章

  1. centos查看cached内部文件
  2. 影响网站各个页面权重高低的因素有哪些?
  3. 重入锁:ReentrantLock 详解
  4. 【设置字符集】Win7 64位系统安装MySQL5.5.21图解教程
  5. VTK:几何对象之PolyLine
  6. 信息安全-5:RSA算法详解(已编程实现)[原创]
  7. 父类与子类之间的关系
  8. apache apollo_Apache Apollo REST API
  9. Linux系统中输入输出管理
  10. 程序员遇到问题的解决之道
  11. python是干嘛的-python到底拿来干什么
  12. synaptics触摸板_使用Dell Synaptics触摸板修复Firefox滚动问题
  13. 【建模应用】PLS偏最小二乘回归原理与应用
  14. 黑鲨重装计算机安装无法继续,黑鲨教你重装系统解决电脑开机无法进入系统问题...
  15. 【安路FPGA】FPGA开发日记(一)
  16. 以一元及二元函数为例,通过多项式的函数图像观察其拟合性能;以及对用多项式作目标函数进行机器学习时的一些理解。
  17. 阿里龙蜥centos8.4 postgis 源码安装
  18. php 制作的效果图,PS制作逼真的下雨效果图
  19. C# 关键字 使用where来限定泛型约束
  20. 直线检测算法博文中缺失的几个源码(Hough_line、LSD、FLD、EDlines、LSWMS、CannyLines、MCMLSD、LSM)

热门文章

  1. 允许保存文件 html5,html5 保存文件
  2. 弧形面如何逆时针排序_环形导轨如何实现拐弯?
  3. Hadoop HIVE 复合数据类型
  4. 3.1 神经网络概览
  5. 马的走法编程java_马周游问题(Java实现)
  6. vue 打开html流_解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题...
  7. VMware ESXi 6.X Syslog日志配置
  8. windows下快速创建大文件
  9. 深度|数据库产品如何选型?掌握这一招就够了
  10. Windows学习总结(22)——Windows基线检查加固脚本