mcrypt关于URL的加密与解密

tony-杨 2009-01-10 05:54:26

<?
//将$string加密后通过地址栏传递给其他页面PHP解密出来
$string = "action=test&id=2&key=".urlencode('测试');
$key = "_key_";

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

$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);

$enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $iv);

//这里是乱码无法通过地址栏传递
echo( '<br />这里是加密后的内容:::::::::>'.$enc);
//转为十六进制通过URL传递,否则是乱码
echo( '<br />转为16进制后的加密内容:::::::::>'.bin2hex($enc) );


$crypttext = str_replace(chr(0), '', mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $enc, MCRYPT_MODE_CBC, $iv) );
echo( '<br />不传递直接解密:::::::::>'.$crypttext);

//转换十六进制为二进制,然后解密,这里无法还原为$string定义的值
$enc = hex2bin( bin2hex($enc) );
$crypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $enc, MCRYPT_MODE_CBC, $iv);
echo( '<br />:::::::::>'.$crypttext);


//转换16进制为2进制,但是这样写是无效的
function hex2bin($data) {
return decbin(hexdec($data));
}
?>

问题:
1、如果不使用bin2hex转换为16进制,如果使传递加密后的数据不乱码
2、使用bin2hex转换为16进制后,hex2bin函数如何还原为原来的二进制并成功解码为$string原值
3、不使用上面的方法,mcrypt应该如何加解密

谢了!
...全文
238 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony-杨 2009-01-10
  • 打赏
  • 举报
回复
就最开始使用的函数就行啦,函数调用错了,估计想火车票的问题想疯了,这么粗心大意

function hex2bin($data) {
if(''==$data)return '';
$len = strlen($data);
for($i=0;$i<$len;$i+=2) {
$return .= pack("C",hexdec(substr($data,$i,2)));
}
return $return;
}
mendytony 2009-01-10
  • 打赏
  • 举报
回复
接分!
tony-杨 2009-01-10
  • 打赏
  • 举报
回复
找到问题
函数名写错了...........
结贴
Zijian_Zhang 2009-01-10
  • 打赏
  • 举报
回复
1、因为是二进制码,可能会有些不是字符,也就是加密后的二进制码不是字符的二进制,不能表示字符,就会有乱码(有的像那些可执行文件用记事本打开的效果);
2、十六进制-〉十进制-〉二进制。
3、PHP手册有实例。
tony-杨 2009-01-10
  • 打赏
  • 举报
回复
这两个16进制转为2进制的函数都试过了,转不出来,不知道哪里出问题了

//这个是最开始使用的函数
function hex2bin($data) {
if(''==$data)return '';
$len = strlen($data);
for($i=0;$i<$len;$i+=2) {
$return .= pack("C",hexdec(substr($data,$i,2)));
}
return $return;
}
//这个是第二个
function hex2bin($data) {
if(''==$data)return '';
$len = strlen($data = strtoupper($data));
for($i=0,$return=''; $i<len; $i++) {
switch($data{$i}) {
case '0': $return .= '0000'; break;
case '1': $return .= '0001'; break;
case '2': $return .= '0010'; break;
case '3': $return .= '0011'; break;
case '4': $return .= '0100'; break;
case '5': $return .= '0101'; break;
case '6': $return .= '0110'; break;
case '7': $return .= '0111'; break;
case '8': $return .= '1000'; break;
case '9': $return .= '1001'; break;
case 'A': $return .= '1010'; break;
case 'B': $return .= '1011'; break;
case 'C': $return .= '1100'; break;
case 'D': $return .= '1101'; break;
case 'E': $return .= '1110'; break;
case 'F': $return .= '1111'; break;
}
}
return $return;
}
//这个是最后一个
function hex2bin($data) {
return decbin(hexdec($data));
}

21,887

社区成员

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

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