网球

资深站长PHP加密解密内部算法a

2019-07-08 18:34:00来源:励志吧0次阅读

17:20 来源:络转载 :水色皇朝【纠错】人评论

A-A+ 怎么开淘宝店 站优化方法 创业如何获得投资 小米note顶配版评测 最新LOL活动

最近学习URL跳转的时候新进三个超好用的PHP加密解密函数貌似是discuz里的使用这些加密解密的原因是因为有时自己的URL地址被人获取以后想破解你里面传值的内容就必须知道你的key,没有key,他应该要破了一阵子才能知道你URL里面的内容吧。

将它们打包成一个文件就叫p吧

?php function passport_encrypt($txt $key) { srand((double)microtime() * ); $encrypt_key = md5(rand(0 32000)); $ctr = 0; $tmp = ''; for($i = 0;$i strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $encrypt_key[$ctr].($txt[$i] ^ $encrypt_key[$ctr++]); } return base64_encode(passport_key($tmp $key)); } function passport_decrypt($txt $key) { $txt = passport_key(base64_decode($txt) $key); $tmp = ''; for($i = 0;$i strlen($txt); $i++) { $md5 = $txt[$i]; $tmp .= $txt[++$i] ^ $md5; } return $tmp; } function passport_key($txt $encrypt_key) { $encrypt_key = md5($encrypt_key); $ctr = 0; $tmp = ''; for($i = 0; $i strlen($txt); $i++) { $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr; $tmp .= $txt[$i] ^ $encrypt_key[$ctr++]; } return $tmp; } ?

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

//p ?php include p; $txt = This is a test; $key = testkey; $encrypt = passport_encrypt($txt$key); $decrypt = passport_decrypt($encrypt$key); echo $hr; echo $hr; echo $hr; ? //p ?php include p; $array = array( a = 1 b = 2 c = 3 d = 4 ); //serialize产生一个可存储的值返回一个字符串unserialize还原 $txt = serialize($array); $key = testkey; $encrypt = passport_encrypt($txt$key); $decrypt = passport_decrypt($encrypt$key); $decryptArray = unserialize($decrypt); echo $hr; echo $hr; echo $hr; echo $hr; ?

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

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

页都是无状态的如果要在新的页中继续使用session则需要把session从一个地方移到另一个地方可能有些人已经想到了我可以通过url传址的方式来调用它.而PHP有个处理session的变量叫$_SESSION.于是将需要注册的session转换成一个数组吧.那么你可以这样写:

//p ?php session_start(); include p; $_SESSION[userid]; $_SESSION[username]; $_SESSION[userpwd]; header(Location: ://$domain/p?s=.urlencode(passport_encrypt(serialize($_SESSION)sessionkey))); ?

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

处理下先

//p ?php session_start(); include p; $_SESSION=unserialize(passport_decrypt($_GET[s]sessionkey)); header(Location: ://$domain/p); ?

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

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

以下是加强版的p

?php session_start(); include_once p; $_SESSION=unserialize(passport_decrypt($_GET[s]sessionkey)); if((time()-$_SESSION[TIME])30){ header(Location: ://$domain/ p); unset($_SESSION[USERNAME]); unset($_SESSION[PASSWORD]); } else header(Location: ://$domain/ p); ?

写这个文件之前你还要在登录那边设置

$_SESSION[TIME] = time();

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

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

查看更多相似文章

怎么做网络优化推广
个人订阅号怎么开微商城
怎么用微信卖水果
分享到: