【发布时间】: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