我遇到了C中加密算法的问题,我编写了一个AES密码术,我正在调试一个函数,而且这个函数打印的行数多于for循环计数。整个代码下方:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char key[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
};
unsigned char state[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff};
const unsigned char sbox[256] =
{
//0 1 2 3 4 5 6 7 8 9 A B C D E F
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, //0
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, //1
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, //2
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, //3
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, //4
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, //5
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, //6
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, //7
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, //8
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, //9
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, //A
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, //B
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, //C
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, //D
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, //E
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
}; //F
const unsigned char Rcon[10] = {
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36};
unsigned char buf1, buf2, buf3, buf4, round, i;
unsigned char rcon;
for (round = 0; round < 10; round++){
//add key + sbox
for (i = 0; i <16; i++){
state[i]=sbox[state[i] ^ key[i]];
}
for (i = 0; i<16; i++){
printf("\n%d",state[i]);
}
}
}
打印功能(如上所示):
for (round = 0; round < 10; round++){
//add key + sbox
for (i = 0; i <16; i++){
state[i]=sbox[state[i] ^ key[i]];
}
for (i = 0; i<16; i++){
printf("\n%d",state[i]);
}
}
输出:
99
202
183
4
9
83
208
81
205
96
224
231
186
112
225
140
251
31
213
197
215
177
246
177
166
249
135
206
78
255
223
236
15
114
14
180
102
141
140
78
228
140
93
166
44
137
62
17
118
143
254
169
170
196
126
59
206
151
91
149
183
95
4
114
56
25
176
172
228
120
188
235
180
11
209
11
234
0
103
255
7
173
55
121
225
255
244
206
101
119
185
99
142
215
249
140
197
145
150
218
217
45
137
221
60
243
109
69
19
87
104
236
166
96
34
53
193
52
115
87
24
45
133
47
192
190
51
17
36
239
183
5
166
199
157
83
202
54
115
54
75
109
39
114
54
40
213
111
58
37
20
32
37
117
182
39
160
208
165
255
有人知道发生了什么事吗?
答案 0 :(得分:2)
你有两个嵌套循环,一个有10个,另一个有16个迭代,所以你打印了160行
答案 1 :(得分:2)
使用循环计数器更改打印以帮助调试: -
for (i = 0; i<16; i++){
printf("\n[%d %d] %d",round, i, state[i]);
}
输出: -
[0 0] 99
[0 1] 202
....
....
[9 14] 165
[9 15] 255
10 X 16 = 160行
答案 2 :(得分:1)
(i = 0; i&lt; 16; i ++)...的内部for循环打印16个数字,每行一个。这个内部for循环被外部调用10次。 16行,10次,是160个数字。