PHP加密解密字符串汇总__第1页
PHP加密解密字符串汇总__第2页
PHP加密解密字符串汇总__第3页
PHP加密解密字符串汇总__第4页
PHP加密解密字符串汇总__第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PHP加密解密字符串汇总_ PHP加密解密函数分享,一个是Discuz!的authcode加密函数(带具体分解),一个是encrypt()函数。需要用法PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。 项目中有时我们需要用法PHP将特定的信息进行加密,也就是通过加密算法生成一个加密字符串,这个加密后的字符串可以通过解密算法进行解密,便于程序对解密后的信息进行处理。 最常见的应用在用户登录以及一些API数据交换的场景。 笔者收录了一些比较经典的PHP加密解密函数代码,分享给大家。加密解密原理一般都是通过

2、肯定的加密解密算法,将密钥加入到算法中,最终得到加密解密结果。 1、特别给力的authcode加密函数,Discuz!经典代码(带详解): function authcode($string, $operation = DECODE, $key = , $expiry = 0) / 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; / 密匙 $key = md5($key ? $key : $GLOBALSdiscuz_auth_key); / 密匙a会参加加解密 $keya = md5(substr($key, 0, 16); / 密匙b会用来做数据

3、完整性验证 $keyb = md5(substr($key, 16, 16); / 密匙c用于改变生成的密文 $keyc = $ckey_length ? ($operation = DECODE ? substr($string, 0, $ckey_length): substr(md5(microtime(), -$ckey_length) : ; / 参加运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); / 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb

4、(密匙b), /解密时会通过这个密匙验证数据完整性 / 假如是解码的话,会从第$ckey_length位开头,由于密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation = DECODE ? base64_decode(substr($string, $ckey_length) : sprintf(%010d, $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result =

5、 ; $box = range(0, 255); $rndkey = array(); / 产生密匙簿 for($i = 0; $i = 255; $i+) $rndkey$i = ord($cryptkey$i % $key_length); / 用固定的算法,打乱密匙簿,增加随机性,似乎很简单,事实上对并不会增加密文的强度 for($j = $i = 0; $i 256; $i+) $j = ($j + $box$i + $rndkey$i) % 256; $tmp = $box$i; $box$i = $box$j; $box$j = $tmp; / 核心加解密部分 for($a = $

6、j = $i = 0; $i $string_length; $i+) $a = ($a + 1) % 256; $j = ($j + $box$a) % 256; $tmp = $box$a; $box$a = $box$j; $box$j = $tmp; / 从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string$i) ($box($box$a + $box$j) % 256); if($operation = DECODE) / 验证数据有效性,请看未加密明文的格式 if(substr($result, 0, 10) = 0 | substr($res

7、ult, 0, 10) - time() 0) substr($result, 10, 16) = substr(md5(substr($result, 26).$keyb), 0, 16) return substr($result, 26); else return ; else / 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的缘由 / 由于加密后的密文可能是一些特别字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace(=, , base64_encode($result); 函数authcode($string, $

8、operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。 用法: $str = abcdef; $key = ; echo authcode($str,ENCODE,$key,0); /加密 $str = 56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk; echo authcode($str,DECODE,$key,0); /解密 2、加解密函数encrypt(): function encrypt($strin

9、g,$operation,$key=) $key=md5($key); $key_length=strlen($key); $string=$operation=D?base64_decode($string):substr(md5($string.$key),0,8).$string; $string_length=strlen($string); $rndkey=$box=array(); $result=; for($i=0;$i=255;$i+) $rndkey$i=ord($key$i%$key_length); $box$i=$i; for($j=$i=0;$i256;$i+) $

10、j=($j+$box$i+$rndkey$i)%256; $tmp=$box$i; $box$i=$box$j; $box$j=$tmp; for($a=$j=$i=0;$i$string_length;$i+) $a=($a+1)%256; $j=($j+$box$a)%256; $tmp=$box$a; $box$a=$box$j; $box$j=$tmp; $result.=chr(ord($string$i)($box($box$a+$box$j)%256); if($operation=D) if(substr($result,0,8)=substr(md5(substr($result,8).$key),0,8) return substr($result,8); else return; else return str_replace(=,base64_encode($result); 函数encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:推断是加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论