Преобразовать массив int в массив без знака для шифрования AES

Я получил массив

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

2 ответа

Решение

Это предполагает, что lsb key[0]и MSB key[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;
     }
}

Если MSB key[0]и lsb key[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));
}
Другие вопросы по тегам