我试图在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随机生成的,这就解释了为什么每次加密的数据都不同。

08-15 22:04