来自main的AES加密,来自child的解密

时间:2013-12-18 13:53:53

标签: c encryption cryptography aes parent-child

我有一个主要和一个子进程。我使用openssl库在main中创建了一个带有密钥的加密字符串。我还创建了一个具有相同密钥的加密字符串。两个输入值都相同,但结果不同。

这是我的主要进程加密:

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

请帮帮我。

2 个答案:

答案 0 :(得分: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的第一个块。

答案 1 :(得分: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返回的值,每次都不同。因此,您使用不同的密钥进行加密和解密。

相关问题