我有一个主要和一个子进程。我使用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");
}
}
请帮帮我。
答案 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返回的值,每次都不同。因此,您使用不同的密钥进行加密和解密。