ホームページ > バックエンド開発 > PHPチュートリアル > デコードに関連する問題がまだいくつかあります。

デコードに関連する問題がまだいくつかあります。

WBOY
リリース: 2016-06-13 13:41:39
オリジナル
786 人が閲覧しました

まだデコードの問題です。

PHP コード
<!--

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]);
?>
ログイン後にコピー


そうです。この関数は正しいですが、問題は、電子メールに送信したいのは暗号化されたコードですが、デコードするには別の Web ページに移動する必要があるということです。

問題は、この iv が印刷されるときに発生することです。 、文字化けしたボックスがたくさんあります。対処方法、またはivを修正する方法は、$iv='123'と警告が報告されます

--- ---解決策------------- -------
はは、なぜその関数を直接使用したのですか? 簡単な例を示しただけです。
実際の運用環境では、暗号化は確実に一方の側で行われ、復号化はもう一方の側で行われます。
それでは、相手がどのようにしてランダムな iv を取得するのかを尋ねているのですか?
CBC の iv は 32 バイトに固定されているため、それを暗号化された文字列
PHP コード
 に入れるだけです。

<?php
関数 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);//実際には、直接結合するだけで、ここで再度暗号化を実行します。
   returnbase64_encode($crypttext.$ivencode); //Cookieのエンコード、ivは文字列の末尾に接続されます
}
関数 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);
   $decrypttext を返します。
}

$str="これは暗号化用です";
$s=encryptCookie($str);
echo "encrypt:".$s."<br/>";
echo "復号化:".decryptCookie($s);
?><div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート