Centos5下mcrypt的加密无法按指定模式执行

tony-杨 2009-04-27 10:15:08
并没有使用随机模式、在本地所有机器上(WinXP)测试都是正常的
但是在下面的环境(Centos)中key跟data每次加密都不一致
根本无法解密出来
请问是mcrypt哪个选项设置的问题?

环境配置

Centos5.2 + Apache/2.2.11 + (Unix) PHP/5.2.9 + mcrypt/2.5.8

程序代码

<?php
function encrypt($data, $key) {
//MCRYPT_RAND|MCRYPT_DEV_URANDOM|MCRYPT_DEV_RANDOM
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_DEV_RANDOM);
$data = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
return bin2hex($data);
}
function decrypt($data, $key) {
if(''==$data)return '';
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_DEV_RANDOM);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, hex2bin( $data ), MCRYPT_MODE_CBC, $iv);
return str_replace(chr(0), '', $data);
}
function hex2bin($data) {
if(''==$data)return '';
for($i=0, $len = strlen($data);$i<$len;$i+=2)
$return .= pack("C",hexdec(substr($data,$i,2)));
return $return;
}

$key = 'key';
$data = '$#$$$$$$$$$$$$$$$$$$';

echo( 'key:' . $key. '<br>' );
echo( 'data:' . $data . '<br>' );

$temp = encrypt($data, $key);
echo( 'encrypt:' . $temp . '<br>' );

$temp = decrypt($temp, $key);
echo( 'decrypt:' . $temp . '<br>' );
?>
...全文
54 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
genshing 2009-04-27
  • 打赏
  • 举报
回复
function encrypt($data, $key) {
//MCRYPT_RAND|MCRYPT_DEV_URANDOM|MCRYPT_DEV_RANDOM
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$data = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB, $iv);
return bin2hex($data);
}
function decrypt($data, $key) {
if(''==$data)return '';
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, hex2bin( $data ), MCRYPT_MODE_ECB, $iv);
return str_replace(chr(0), '', $data);
}
tony-杨 2009-04-27
  • 打赏
  • 举报
回复
问题解决
用MCRYPT_MODE_CBC获取种子 用MCRYPT_MODE_ECB加解密就没有问题了
    $iv   = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, hex2bin( $data ), MCRYPT_MODE_ECB, $iv);
tony-杨 2009-04-27
  • 打赏
  • 举报
回复
不管是用MCRYPT_RAND、MCRYPT_DEV_URANDOM还是MCRYPT_DEV_RANDOM
结果都是随机的
mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_DEV_URANDOM);

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧