2014-08-28 82 views
2

我尝试使用下,两个OpenAES和OpenSSL,是这样的:
OpenAES/OpenSSL的保持兼容

  • 应用1编码使用OpenAES
  • 应用2解码使用OpenSSL
密码密码

问题是我无法解码它,实际上我很惊讶,因为每当OpenSSL或任何其他我见过的AES实现总会生成 sam时,OpenAES会生成一个 不同的块e块。

我注意到的另一个区别是,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
0123所生成的密钥pEncoded来自OpenAES的加密块
pDecoded输出数据。

我不能把我的手指上的问题尚未...

是否有使用OpenAES所以结果可以通过以下OpenSSL解密的一种特殊的方式,或只是不兼容?

由于

+0

我很疑惑你为什么在你的加密代码中使用'oaes_decrypt(...)'。这是OpenAES的一些糟糕的命名吗? – rossum 2014-08-28 16:20:04

+0

我的不好,我粘贴了错误的代码...感谢注意!我编辑它。 – julz 2014-08-28 16:44:56

+0

伟大的图书馆,没有文件,没有问题。即使它在Google代码上显示,也很难通过谷歌搜索找到。那么这段代码如何处理:'for(_j = 0; _j 2014-08-28 18:56:31

回答

2

OpenAES前缀与OpenAES特定报头中的加密的数据,其次是静脉,然后将加密的数据(+填充)。

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

+0

即使使用专有填充,它也是未描述的专有格式。如果我发现哪个Eclipse开发者正在使用它,我会给他一个很好的踢。 – 2014-08-28 18:59:07

相关问题