【发布时间】:2011-03-10 02:22:57
【问题描述】:
我正在尝试在两个不同的组件中执行加密和解密(Rijndael 256,ecb 模式):
1. PHP - 服务器端(使用 mcrypt)
2. C++ - 客户端(使用 gcrypt)
当客户端无法正确解密加密数据(由服务器端生成)时,我遇到了问题
所以...我检查了:
1.初始向量 - 相同相同(32长度)
2. 钥匙 - 两边同样的钥匙..
所以我用 C++ 编写了一些代码来加密数据(使用与 php 中相同的参数)
我发现加密数据包含不同的字节(可能是编码问题??)
我会很高兴得到一些帮助
PHP - MCrypt
// Encrypt Function
function mc_encrypt($encrypt, $mc_key) {
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$iv = "static_init_vector_static_init_v";
echo "IV-Size: " . $iv_size . "\n";
echo "IV: " . $iv . "\n";
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $mc_key, $encrypt, MCRYPT_MODE_ECB, $iv);
print_hex($passcrypt);
return $encode;
}
mc_encrypt("Some text which should be encrypted...","keykeykeykeykeykeykeykeykeykeyke");
我会在评论中发布 C++ 代码
谢谢, 约翰尼德普
【问题讨论】:
-
C++ - libgcrypt(我将 C++ 文件上传到 hotfile)hotfile.com/dl/51575328/ce8af3a/gcrypt.cpp.html 再次感谢..
-
您可能应该查找一些 AES 测试向量并通过这两种实现来运行它们以找出哪一个出错了。我希望这些实现必须有效,所以你可能使用了一个稍微错误的方法。
-
在 ECB 模式下不使用初始化向量 (IV)。如果提供了不同的实现,则可能会有所不同。如果您想确保实现能够正常工作,请使用 0(零)的 IV。尽管您提供了 IV,但两种实现都应该忽略它,但永远无法确定这一点。在 ECB 模式下不提供 IV 应该也可以,但同样,这完全取决于实现。