我试图在C中同时使用OpenAES和OpenSSL,方法如下:
应用程序1使用OpenAES对密码进行编码
应用程序2使用OpenSSL解码密码
问题是我无法解码,事实上我很惊讶OpenAES生成了一个
每次OpenSSL或任何其他AES实现时都会生成不同的块
同一个街区。
我注意到的另一个区别是OpenAES生成的块是48字节,而OpenSSL生成16字节。
这就是我如何加密字符串(OpenAES):
pCtx = oaes_alloc();
if (pCtx == NULL)
return FALSE;
oRet = oaes_key_import(pCtx, sKey, szKey);
if (oRet != OAES_RET_SUCCESS)
{
return FALSE;
}
// Get the required buffer size
oRet = oaes_encrypt(pCtx, (const uint8_t*)csSource, szLen, NULL, pOutLen);
if (oRet != OAES_RET_SUCCESS)
{
oaes_free(&pCtx);
return FALSE;
}
*ppOut = (char*)calloc(*pOutLen, sizeof(char));
oRet = oaes_encrypt(pCtx, (const uint8_t*)csSource, szLen, (uint8_t*)*ppOut, pOutLen);
if (oRet != OAES_RET_SUCCESS)
{
oaes_free(&pCtx);
free(*ppOut);
return FALSE;
}
oaes_free(&pCtx);
我就是这样解密的(OpenSSL):
AES_KEY kDecrypt;
AES_set_decrypt_key(sKey, 128, &kDecrypt);
AES_decrypt(pEncoded, pDecoded, &kDecrypt);
sKey是用OpenAES生成的密钥
用铅笔从OpenAES中截取加密块
p记录输出数据。
我还不能把我的手指放在这个问题上。。。
是否有使用OpenAES的特定方法,以便可以通过OpenSSL对结果进行解密,或者只是不兼容?
最佳答案
OpenAES使用OpenAES特定的头作为加密数据的前缀,后面是iv,然后是加密数据(+填充)。
因为IV似乎是由OpenAES随机生成的,这就解释了为什么每次加密的数据都不同。