C- printf在for循环中打印更多线条



我在C中使用加密算法有问题,我正在编码AES Criptography,我正在调试一个函数,并且此功能打印的行要多于循环计数。在整个代码下方:

#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

有人知道发生了什么事?

用循环计数器更改打印以帮助调试: -

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行

您有两个嵌套循环,一个带有10个,另一个迭代,因此您获得了160行印刷

(i = 0; i&lt; 16; i (的内部循环的内部循环...打印16个数字,每行1个。外部循环的内部循环被10次调用。16行,10次为160个数字。

最新更新