将 int 数组转换为 unsigned char 数组以进行 AES 加密

Convert an int array to an unsigned char array for AES encryption

我得到了一个数组

int key[128] = {1,0,1,0,0,1, .........., 0,1,0}

我想将这个数组转换为

unsigned char key1[16] = {0x__,0x__,...,0x__} 

例如如果

from key[0] to key[7] is 10100011, then key1[0] = 0xa3

我需要使用这个新数组进行 AES 加密

这假设 lsbkey[0]msbkey[7]

int key[128] = {1,0,1,0,0,1, .........., 0,1,0}
unsigned char key1[16];

int (* better_key)[8] = (int (*)[8])key;

int i;
int j;

for (i=0;i<sizeof(key1); i++){
     key1[i]=0;
     for(j=0;j<8;j++){
       key1[i]|=better_key[i][j]<<j;
     }
}

如果msbkey[0]lsbkey[7],只需替换

better_key[i][j]

better_key[i][7-j]

遍历 key[] 的每个元素,将其位位置值添加(或运算)到 key1[] 的相应元素。

#define N 128
#define B8 8

int key[N] = {1,0,1,0,0,1, .........., 0,1,0}
unsigned char key1[N/B8] = { 0 };

for (unsigned i = 0; i<N; i++) {
  key1[i/B8] |= key[i] << (B8 - 1 - (i%B8));
}