search
Homephp教程php手册迅速学会PHP加密解密技巧
迅速学会PHP加密解密技巧Jun 13, 2016 am 11:11 AM
phpforuseencrypt and decodereasonlearnusSkillofdetailedfast

我们在这里为大家详细介绍了有关

使用这些PHP加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能知道你URL里面的内容吧...

闲话少说,先将它们打包成一个文件就叫fun.php吧

  1.  ?php  
  2. function passport_encrypt($txt, $key) {  
  3. srand((double)microtime() * 1000000);  
  4. $encrypt_key = md5(rand(0, 32000));  
  5. $ctr = 0;  
  6. $tmp = '';  
  7. for($i = 0;$i  strlen($txt); $i++) {  
  8. $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  
  9. $tmp .= $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. $encrypt_key = md5($encrypt_key);  
  24. $ctr = 0;  
  25. $tmp = '';  
  26. for($i = 0; $i  strlen($txt); $i++) {  
  27. $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  
  28. $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];  
  29. }  
  30. return $tmp;  
  31. }  
  32. ?> 

以下是一些示例…加深对这三个PHP加密解密函数的理解…
 

<ol class="dp-xml">
<li class="alt"><span><span>//string.php  </span></span></li>
<li><span class="tag"><span> ?php  </span></span></li>
<li class="alt"><span>include “fun.php”;  </span></li>
<li>
<span>$</span><span class="attribute">txt</span><span> = “This is a test”;  </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>echo $txt.”</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span></span></span>
</li>
<li class="alt">
<span>echo $encrypt.”</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span></span></span>
</li>
<li>
<span>echo $decrypt.”</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </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> ?php  </span></span></li>
<li><span>include “fun.php”;  </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 class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span></span></span>
</li>
<li>
<span>echo $encrypt.”</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span></span></span>
</li>
<li class="alt">
<span>echo $decrypt.”</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span></span></span>
</li>
<li>
<span>echo $decryptArray.”</span><span class="tag"><span> </span><span class="tag-name">br</span><span class="tag">></span><span class="tag"><span> </span><span class="tag-name">hr</span><span class="tag">></span><span>”;  </span></span></span>
</li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
</ol>

关键的地方来了…当你要跳转到另外一个网址,但又要保证你的session无误的时候,你需要对session作一个处理.貌似一个公司有一个网站又有一个论坛,两个地方都有注册和登录,但又不想让用户在主页登录后跳转到论坛的时候session失效,即是登录一次跑完整间公司…

那要怎样来处理用户的session呢…

网页都是无状态的,如果要在新的网页中继续使用session,则需要把session从一个地方移到另一个地方,可能有些人已经想到了,我可以通过url传址的方式来调用它….而PHP有个处理session的变量,叫$_SESSION.于是….

将需要注册的session转换成一个数组吧.那么,你可以这样写:

<ol class="dp-xml">
<li class="alt"><span><span>//login.php  </span></span></li>
<li><span class="tag"><span> ?php  </span></span></li>
<li class="alt"><span>session_start();  </span></li>
<li><span>include “fun.php”;  </span></li>
<li class="alt"><span>….  </span></li>
<li><span>$_SESSION[“userid”];  </span></li>
<li class="alt"><span>$_SESSION[“username”];  </span></li>
<li><span>$_SESSION[“userpwd”];  </span></li>
<li class="alt"><span>…  </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>

PHP加密解密例子中先用serialize将$_SESSION变成可存储的数据,然后通过passport_encrypt将这个数据加密,加urlencode的原因是因为$_SESSION加密时,有可能会产生像料想不到的编码,所以以防万一…(事实证明非常有效)
处理下先

<ol class="dp-xml">
<li class="alt"><span><span>//process.php  </span></span></li>
<li><span class="tag"><span> ?php  </span></span></li>
<li class="alt"><span>session_start();  </span></li>
<li><span>include “fun.php”;  </span></li>
<li class="alt">
<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><span>header("Location: http://$domain/index.php");  </span></li>
<li class="alt">
<span class="tag">?></span><span> </span>
</li>
</ol>

先用$_GET[“s”]获取URL的参数,然后用passport_decrypt将其解密,再用unserialize将其数据还原成原始数据
到了这步处理,你的网页就可能通过header自由跳转啦….

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

以下是加强版的process.php

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><span> ?php  </span></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>
</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….那他一样登录成功…


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么判断有没有小数点php怎么判断有没有小数点Apr 20, 2022 pm 08:12 PM

php判断有没有小数点的方法:1、使用“strpos(数字字符串,'.')”语法,如果返回小数点在字符串中第一次出现的位置,则有小数点;2、使用“strrpos(数字字符串,'.')”语句,如果返回小数点在字符串中最后一次出现的位置,则有。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use