我试图用C语言同时使用OpenAES和OpenSSL:
问题在于我无法对其进行解码,实际上我对OpenAES生成的内容感到非常惊讶 每当OpenSSL或我见过的任何其他AES实现始终生成时,都会使用不同的块 同一个街区。
我注意到的另一个不同之处是当OpenSSL生成16时,OpenAES生成的块是48个字节。
这是我加密字符串的方式(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生成的密钥
pEncoded 来自OpenAES的加密块
pDecoded 输出数据。
我还无法解决问题......
是否有使用OpenAES的特定方法,以便OpenSSL可以解密结果,还是只是不兼容?
答案 0 :(得分:2)
OpenAES 使用OpenAES特定标头为加密数据添加前缀,然后是iv,然后是加密数据(+填充)。
由于IV似乎是由OpenAES随机生成的,这解释了为什么数据因每次加密而不同。