Преобразовать массив 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));
}