首頁 > 後端開發 > php教程 > 还是解码有关问题,依旧有点有关问题

还是解码有关问题,依旧有点有关问题

WBOY
發布: 2016-06-13 13:41:39
原創
785 人瀏覽過

还是解码问题,,依旧有点问题

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?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' 还报警告

------解决方案--------------------
呵呵,你咋直接用了那个函数了,我只是提供下简单示例。
实际生产环境肯定是加密是一端,解密是另一端的。
所以你是问另一端怎么得到那个随机不定iv吧?
因为CBC的iv固定是32字节的,所以直接把它拼进加密串就行了
PHP code

<?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);
?> <div class="clear">
                 
              
              
        
            </div>
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板