【问题标题】:OpenAES/OpenSSL compatibilityOpenAES/OpenSSL 兼容性
【发布时间】:2014-08-28 15:37:19
【问题描述】:

我正在尝试在 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
pEncoded 来自 OpenAES 的加密块
pDecoded 输出数据生成的密钥。

我还不能解决这个问题...

是否有使用 OpenAES 的特殊方法,以便结果可以通过 OpenSSL 解密,还是只是不兼容?

【问题讨论】:

  • 我很困惑你为什么在你的加密代码中使用oaes_decrypt(...)。这只是 OpenAES 的一些非常糟糕的命名吗?
  • 我的错,我粘贴了错误的代码...感谢您的注意!我编辑了它。
  • 很棒的库,没有文档,没有问题。谷歌搜索很难找到,即使它在谷歌代码中也有特色。那么这个 sn-p: for( _j = 0; _j < OAES_BLOCK_SIZE - _block_size; _j++ ) {_block[ _block_size + _j ] = _j + 1;} 呢?如果那是填充,那么它将是什么样的填充?请远离这样的废话。
  • 我听从了您的建议并从我的项目中删除了 OpenAES,毕竟我会尝试使用 OpenSSL 的另一种解决方案。

标签: c encryption openssl


【解决方案1】:

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

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

【讨论】:

  • 这是一种未描述的专有格式,即使有专有填充。如果我发现哪个 Eclipse 开发人员正在使用它,我会好好踢他。
猜你喜欢
  • 2015-05-29
  • 1970-01-01
  • 2013-12-24
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多