【发布时间】:2012-06-25 00:33:47
【问题描述】:
我必须遵循代码,据我所知它是正确的,但它不起作用。我正在尝试使用 PHP 的 Mcrpyt 对数据进行编码,然后使用 openssl 命令行工具对其进行解码。
这是我的 PHP 代码:
/*
* Convert a normal ascii string to a hexadecimal string.
* Complement of hexToString().
*/
function stringToHex($str)
{
$hex_str = "";
for ($i = 0; $i < strlen($str); ++$i)
{
$hex_str .= sprintf("%02X", ord($str[$i]));
}
return $hex_str;
}
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$block_size = mcrypt_get_block_size("rijndael-128", "cbc");
$pad = $block_size - (strlen($data) % $block_size);
$data .= str_repeat(chr($pad), $pad);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, "1234567812345678", $data, MCRYPT_MODE_CBC, $iv);
$message = stringToHex($iv) . base64_encode($encrypted);
我将 IV 附加到编码的消息中。比如说IV是00000000000000000000000000000000(大小为32),然后我使用以下命令进行解密:
openssl enc -d -aes-128-cbc -A -nosalt -K 31323334353637383132333435363738 -iv 00000000000000000000000000000000 -in file_in > file_out
另请注意,1234567812345678 是十六进制,即 31323334353637383132333435363738。但我不断收到相同的错误消息:
错误的解密 1340:错误:0606506D:数字信封例程:EVP_DecryptFinal_ex:错误的最终块长度:./crypto/evp/evp_enc.c:454:
有人吗?
提前致谢, 全部的爱, 乔里。
【问题讨论】:
-
没有人? :-( 还在等待答案。
-
好吧,你应该写一个独立的代码示例。缺少的 stringToHex 函数可能很明显,但不允许测试您的代码。
-
哦,是的,我很抱歉。会编辑。但我不认为有问题,因为它会生成适当的 IV。不管怎么说,还是要谢谢你! :-)
标签: php openssl mcrypt rijndael