2016-03-19 20 views
0

ためのunsigned char型の配列にint型の配列を変換し、私は私がは、AES暗号化

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

場合例えば

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

に、この配列を変換する配列

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

を得ましたこの新しい配列をAES暗号化に使用する必要があります

+0

ビット幅が必要な場合は、 'stdint.h 'の固定幅タイプを使用してください。また、テストでは、符号付き整数の定義済み表現を提供します。 – Olaf

+1

私が理解するように、整数1と0の配列をバイト配列*に変換する方法を尋ねていますが、これは暗号化とは関係ありません。 –

答えて

0

これはLSBkey[0]であることを前提とし、かつMSBkey[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; 
    } 
} 

あり、そしてLSBだけで置き換える、key[7]ある

better_key[i][j]

better_key[i][7-j]

key[]
0

の各要素はkey1[]の対応する要素には、そのビット位置の値が(OR接続)を添加することも行きます。

#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)); 
}