<?php
function encryptCookie($value){
if(!$value){return false;}
$key = 'paxospass1234!';
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
return array(trim(base64_encode($crypttext)),$iv); //encode for cookie
}
function decryptCookie($value,$iv){
if(!$value){return false;}
$value = base64_decode($value);
$key = 'paxospass1234!';
$text = $value;
// $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
// $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
return $decrypttext;
}
$str="this is for encry";
$s=encryptCookie($str);
echo decryptCookie($s[0],$s[1]);
?>没错。这函数正确,但是问题是,我要发到邮件里的是加密的代码,但是解码要到另一个网页,问题是这个iv 打印出来时很多的方框框乱码,,怎么处理,,或者怎么让iv固定,我直接写$iv='123' 还报警告
function encryptCookie($value){
if(!$value){return false;}
$key = 'paxospass1234!';
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
return array(trim(base64_encode($crypttext)),$iv); //encode for cookie
}
function decryptCookie($value,$iv){
if(!$value){return false;}
$value = base64_decode($value);
$key = 'paxospass1234!';
$text = $value;
// $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
// $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
return $decrypttext;
}
$str="this is for encry";
$s=encryptCookie($str);
echo decryptCookie($s[0],$s[1]);
?>没错。这函数正确,但是问题是,我要发到邮件里的是加密的代码,但是解码要到另一个网页,问题是这个iv 打印出来时很多的方框框乱码,,怎么处理,,或者怎么让iv固定,我直接写$iv='123' 还报警告
解决方案 »
- 【招聘,全职或兼职】武汉的PHP程序员
- 关于邮箱注册成功的验证如何实现?
- 为了使用绝对路径 定义了define('filepath',dirname(__FILE)) 在目录下运行正常 但是在下一级目录再用就出错了 请知道的进来看下指点一下
- 如何允许特定的网站连接。急呀 !!!!!!!!!!
- PHP程序员的职业生涯前景在哪里?难道只能转Java?(很急很尴尬)
- 100分求救:一个文章系统,在XP下能正常发布信息,2K server下却发布信息失败
- 关于博客
- +30 还是smarty复选框的问题
- print echo什么区别?
- php对xml的操作非常简单,急急急
- 偶然关注数据库安全问题,如下
- php中的checkbox 問題
return array(trim(base64_encode($crypttext)),base64_encode($iv));
……
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, base64_decode($iv));传输时,也用的base64,以防止内容丢失。
实际生产环境肯定是加密是一端,解密是另一端的。
所以你是问另一端怎么得到那个随机不定iv吧?
因为CBC的iv固定是32字节的,所以直接把它拼进加密串就行了<?php
function encryptCookie($value){
if(!$value){return false;}
$key = 'paxospass1234!';
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$text, MCRYPT_MODE_CBC, $iv);
$ivencode = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$crypttext,$iv,MCRYPT_MODE_ECB);//其实直接拼接就可以,这里再做一次加密
return base64_encode($crypttext.$ivencode); //encode for cookie,iv拼接到串尾
}
function decryptCookie($value){
if(!$value){return false;}
$value = base64_decode($value);
$rvalue = substr($value,0,-32);//原加密串
$iv = substr($value,-32);//iv
$iv = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$rvalue,$iv,MCRYPT_MODE_ECB);//解密iv
$key = 'paxospass1234!';
$text = $rvalue;
// $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
// $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, $iv);
return $decrypttext;
}$str="this is for encry";
$s=encryptCookie($str);
echo "encrypt:".$s."<br/>";
echo "decrypt:".decryptCookie($s);
?>