2013-12-18 4 views
0

У меня есть основной и дочерний процесс. Я создал зашифрованную строку с основным ключом, используя библиотеку openssl. Я также создал зашифрованную строку с тем же ключом. Оба входных значения одинаковы, но их результаты различны.AES шифрование от основного, дешифрование от ребенка

Вот мой основной процесс шифрования:

unsigned char *encryptedString; 
unsigned char key[8] = {4,1,8,9,1,61,64,220}; 
unsigned char * enc_out = malloc(80*sizeof(char)); 

AES_KEY enc_key; 
AES_set_encrypt_key(key, 128, &enc_key); 
AES_encrypt(originalString, enc_out, &enc_key); 

encryptedString = malloc(80*sizeof(char)); 
strcpy(encryptedString, enc_out); 

free(enc_out); 

Вот мой процесс дешифровки ребенок

//gets encryptedString as parameter argv[2] from main and it is ok 

//gets originalString as argv[1] from main and it is ok 

//minkeyspace and maxkeyspace calculated and they are ok 


unsigned char *encryptedString; 
AES_KEY dec_key; 
unsigned char key[8] = {4,1,8,9,1,61,64, 0}; 
unsigned char * dec_out = malloc(80*sizeof(char)); 

for(j = minkeyspace; j < maxkeyspace ; j++){ 
    key[7] = j; 

    AES_set_decrypt_key(key,128,&dec_key); 
    AES_decrypt(encryptedString, dec_out, &dec_key); 

if(strcmp(originalString, dec_out) == 0){ //They are not equal. There is a problem 
    puts("FOUND"); 
    } 
} 

Пожалуйста, помогите мне.

ответ

1
unsigned char key[8] = {4,1,8,9,1,61,64,220}; 
unsigned char * enc_out = malloc(80*sizeof(char)); 

AES_KEY enc_key; 
AES_set_encrypt_key(key, 128, &enc_key); 

Вы используете 128-битные ключи, но указываете только первые 64 бит (8 байтов). Следующие (32 или 64) биты - это значение, возвращаемое malloc, которое будет отличаться каждый раз. Таким образом, вы используете разные ключи для шифрования и дешифрования.

+0

, который решил это! Благодаря... – gesirdekatwork

2

Ну, dec_out не должен быть равен encryptedString, он должен быть равен originalString.

Кроме того, при взгляде на редактируемом коде (я предполагаю, что я пропустил это раньше), можно использовать разные ключи для шифрования/дешифрования:

unsigned char key[8] = {4,1,8,9,1,61,64,220}; 
unsigned char key[8] = {4,1,8,9,1,61,64, 0}; 

Одна последней вещь. Sinch вы не инициализируете данные (dec_out, encrypted_string), а так как AES_encrypt/AES_decrypt обрабатывает только один block at a time, вы получаете разные (не определенные) байты после блока, и поэтому strcmp не работает, попробуйте сравнить первые блоки с помощью memcmp.

+0

ответ на этот вопрос.и отредактировал вопрос. Но ничего ... – gesirdekatwork

+0

см. Edit ........ – MByD

+0

Я пытаюсь создать ключ. Я редактирую последний элемент ключа. – gesirdekatwork

Смежные вопросы