ホームページ  >  記事  >  バックエンド開発  >  PHP の暗号化と復号化のスキルをすぐに学ぶ_PHP チュートリアル

PHP の暗号化と復号化のスキルをすぐに学ぶ_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-15 13:34:32992ブラウズ

ここで

について詳しく紹介します。これらのPHP暗号化と復号化を使用する理由は、URLアドレスが取得される場合があり、渡された値を解読したい場合はキーを知っている必要があるためです。キーはありません。彼があなたの URL の内容を知るにはしばらく時間がかかるはずです...

早速、それらをファイルにパッケージ化して、fun.php

という名前を付けます。
  1. < ?php
  2. function passport_encrypt($txt, $key) { srand((double)microtime() * 1000000);  
  3. $
  4. encrypt_key = md5(rand(0, 32000));   $
  5. ctr = 0;   $
  6. tmp = '';   for($
  7. i = 0;$i < strlen($txt); $ i++) { $
  8. ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;   $tmp
  9. .= $encrypt_key[$ctr].($txt[$i]) ^ $encrypt_key[$ctr++]);  
  10. }
  11. return base64_encode(passport_key($tmp, $key));  
  12. }
  13. function passport_decrypt($txt, $key) {
  14. $txt = passport_key (base64_decode($txt), $key);  
  15. $tmp = '';  
  16. for($i = 0;$i < strlen($txt); $ i++) {
  17. $md5 = $txt[$i];  
  18. $tmp .= $txt[++$i] ^ $md5;  
  19. }
  20. return $tmp;  
  21. }
  22. function passport_key($txt, $encrypt_key) {
  23. $
  24. encrypt_key = m d5($encrypt_key);  
  25. $
  26. ctr = 0;  
  27. $
  28. tmp = '';  
  29. for($
  30. i = 0; $i < strlen($txt); $ i++) {
  31. $
  32. ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  
  33. $tmp
  34. .= $txt[$i] ^ $encrypt_key[$ctr++];  
  35. }
  36. return $tmp;  
  37. }
  38. ?>
  39. 以下はいくつかの例です…加深对この3つのPHP加密解密関数の理解…

<ol class="dp-xml">
<li class="alt"><span><span>//string.php  </span></span></li>
<li>
<span class="tag"><</span><span> ?php  </span></li><li class="alt"><span>include &ldquo;fun.php&rdquo;;  </span></li><li><span>$</span><span class="attribute">txt</span><span> = &ldquo;This is a test&rdquo;;  </span></li><li class="alt"><span>$</span><span class="attribute">key</span><span> = &ldquo;testkey&rdquo;;  </span></li><li><span>$</span><span class="attribute">encrypt</span><span> = </span><span class="attribute-value">passport_encrypt</span><span>($txt,$key);  </span></li><li class="alt"><span>$</span><span class="attribute">decrypt</span><span> = </span><span class="attribute-value">passport_decrypt</span><span>($encrypt,$key);  </span></li><li><span>echo $txt.&rdquo;</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li class="alt">
<span>echo $encrypt.”</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li>
<span>echo $decrypt.”</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
<li><span>//array.php  </span></li>
<li class="alt">
<span class="tag"><</span><span> ?php  </span></li><li><span>include &ldquo;fun.php&rdquo;;  </span></li><li class="alt"><span>$</span><span class="attribute">array</span><span class="attribute-value">array</span><span> = array(  </span></li><li><span>"a" =</span><span class="tag">></span><span> "1",  </span>
</li>
<li class="alt">
<span>"b" =</span><span class="tag">></span><span> "2",  </span>
</li>
<li>
<span>"c" =</span><span class="tag">></span><span> "3",  </span>
</li>
<li class="alt">
<span>"d" =</span><span class="tag">></span><span> "4"  </span>
</li>
<li><span>);  </span></li>
<li class="alt"><span>//serialize产生一个可存储的值,<br>返回一个字符串,unserialize还原  </span></li>
<li>
<span>$</span><span class="attribute">txt</span><span> = </span><span class="attribute-value">serialize</span><span>($array);  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">key</span><span> = “testkey”;  </span>
</li>
<li>
<span>$</span><span class="attribute">encrypt</span><span> = </span><span class="attribute-value">passport_encrypt</span><span>($txt,$key);  </span>
</li>
<li class="alt">
<span>$</span><span class="attribute">decrypt</span><span> = </span><span class="attribute-value">passport_decrypt</span><span>($encrypt,$key);  </span>
</li>
<li>
<span>$</span><span class="attribute">decryptArray</span><span> = </span><span class="attribute-value">unserialize</span><span>($decrypt);  </span>
</li>
<li class="alt">
<span>echo $txt.”</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li>
<span>echo $encrypt.”</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li class="alt">
<span>echo $decrypt.”</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li>
<span>echo $decryptArray.”</span><span class="tag"><</span><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><</span><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span>
</li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
</ol>

关键の地方来了…当你要跳转另他の网址、但又必保護的セッション無误的時候、你要对セッション作一处理。外見似一公司有一网站又有一论坛、二地方都有注册及び登录、但又主页登录後に论坛にジャンプするときのセッション損失、つまり、登录一次跑完整间公司…

那要怎样来、ユーザーのセッションを処理する必要があります…

ネット页都は状態がありません。のネットワーク内でセッションが継続的に使用されているため、セッションをある場所から別の場所に移動する必要があります。おそらく、何人かのユーザーがすでに目的を達成している可能性があります。URL 経由でセッションを使用できます…。PHP では、セッションの量を処理します。 $_SESSION.から….

要注釈のセッションを数値グループに変換します。このデータを加重します。urlencode の原因は、$_SESSION が密になっているため、画像素材が予期しないコードを生成する可能性があるため、予防策を講じています…(事は非常に有効です)

処理下先

<ol class="dp-xml">
<li class="alt"><span><span>//login.php  </span></span></li>
<li>
<span class="tag"><</span><span> ?php  </span></li><li class="alt"><span>session_start();  </span></li><li><span>include &ldquo;fun.php&rdquo;;  </span></li><li class="alt"><span>&hellip;.  </span></li><li><span>$_SESSION[&ldquo;userid&rdquo;];  </span></li><li class="alt"><span>$_SESSION[&ldquo;username&rdquo;];  </span></li><li><span>$_SESSION[&ldquo;userpwd&rdquo;];  </span></li><li class="alt"><span>&hellip;  </span></li><li><span>header("Location: http:<br />//$domain/process.php?</span><span class="attribute">s</span><span>="<br />.urlencode(passport_encrypt<br />(serialize($_SESSION),"</span><span class="attribute-value">sessionkey</span><span>")));  </span></li><li class="alt"><span class="tag">?></span><span> </span>
</li>
</ol>
先用$_GET[ 「s」] URL のパラメータを取得し、その後、passport_decrypt を使用して解読し、再シリアル化してそのデータを元のデータに変換します

この処理を完了すると、ヘッダー自由跳躍を介してインターネットを利用できる可能性があります…

这种PHP加密解密方法还涉及到安全性的问题,如果你的url地址在传址的过程中被人家获取的话,那就真的是不好意思了…人家虽然可能破解不了url里边的内容,但人家也可以直接用这个url地址来登录你的一些个人账户啊,邮箱帐户啊甚至银行帐户(当然很少人会这样写,我例外,哈哈)…听起来好怕….但其实你可以在跳转页面作取消session处理….

以下是加强版的process.php

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><</span><span> ?php  </span></span></li><li><span>session_start();  </span></li><li class="alt"><span>include_once "fun.php";  </span></li><li><span>$</span><span class="attribute">_SESSION</span><span>=</span><span class="attribute-value">unserialize</span><span>(passport_<br />decrypt($_GET["s"],"sessionkey"));  </span></li><li class="alt"><span>if((time()-$_SESSION["TIME"])</span><span class="tag">></span><span>30){  </span></span></li>
<li><span>header("Location: http://<br>$domain/ login.php");  </span></li>
<li class="alt"><span>unset($_SESSION["USERNAME"]);  </span></li>
<li><span>unset($_SESSION["PASSWORD"]);  </span></li>
<li class="alt"><span>}  </span></li>
<li><span>else  </span></li>
<li class="alt"><span>header("Location: http://<br>$domain/ index.php");  </span></li>
<li>
<span class="tag">?></span><span> </span>
</li>
</ol>

写这个PHP加密解密文件之前,你还要在登录那边设置

$_SESSION["TIME"] = time();

设置这个的原因主要是获取两边的时间,如果跳转的时候超过30秒的时候,你就可以让它跳转到login.php登录页面,网速慢的客户就不好意思啦…但这也预防了如果此url被人获取,而这个人又没有在30秒内登录的话,那就不好意思啊,超时重新登录.

$_SESSION["USERNAME"]和$_SESSION["PASSWORD"] 这两个东东就是用户登录时需要输入的用户名和密码了….取消这两个session的原因就是因为如果你的url被人获取了,那个人虽然在超过30秒内跳转到loign.php的页面,但那些传过来的session依然有效,只要将url后缀login.php改为index.php….那他一样登录成功…


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445980.htmlTechArticle我们在这里为大家详细介绍了有关 使用这些PHP加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。