OpenAES / OpenSSL兼容性

时间:2014-08-28 15:37:19

标签: c encryption openssl

我试图用C语言同时使用OpenAES和OpenSSL:

  • 应用程序1使用OpenAES
  • 对密码进行编码
  • 应用程序2使用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可以解密结果,还是只是不兼容?

1 个答案:

答案 0 :(得分:2)

OpenAES 使用OpenAES特定标头为加密数据添加前缀,然后是iv,然后是加密数据(+填充)。

由于IV似乎是由OpenAES随机生成的,这解释了为什么数据因每次加密而不同。