很赞的PHP字符串加密函数

最近, 从discuz里面发现了一个很牛的加密解密函数。

此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还

这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等

 1 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 /**
 2   * @param string $string 原文或者密文
 3   * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
 4   * @param string $key 密钥
 5    * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
 6    * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
 7    *
 8      * @example
 9      *
10      *  $a = authcode(‘abc‘, ‘ENCODE‘, ‘key‘);
11      *  $b = authcode($a, ‘DECODE‘, ‘key‘);  // $b(abc)
12      *
13      *  $a = authcode(‘abc‘, ‘ENCODE‘, ‘key‘, 3600);
14      *  $b = authcode(‘abc‘, ‘DECODE‘, ‘key‘); // 在一个小时内,$b(abc),否则 $b 为空
15      */
16 function authcode($string, $operation = ‘DECODE‘, $key = ‘‘, $expiry = 3600) {
17
18         $ckey_length = 4;
19         // 随机密钥长度 取值 0-32;
20         // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
21         // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
22         // 当此值为 0 时,则不产生随机密钥
23
24         $key = md5($key ? $key : ‘default_key‘); //这里可以填写默认key值
25         $keya = md5(substr($key, 0, 16));
26         $keyb = md5(substr($key, 16, 16));
27         $keyc = $ckey_length ? ($operation == ‘DECODE‘ ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ‘‘;
28
29         $cryptkey = $keya.md5($keya.$keyc);
30         $key_length = strlen($cryptkey);
31
32         $string = $operation == ‘DECODE‘ ? base64_decode(substr($string, $ckey_length)) : sprintf(‘%010d‘, $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
33         $string_length = strlen($string);
34
35         $result = ‘‘;
36         $box = range(0, 255);
37
38         $rndkey = array();
39         for($i = 0; $i <= 255; $i++) {
40             $rndkey[$i] = ord($cryptkey[$i % $key_length]);
41         }
42
43         for($j = $i = 0; $i < 256; $i++) {
44             $j = ($j + $box[$i] + $rndkey[$i]) % 256;
45             $tmp = $box[$i];
46             $box[$i] = $box[$j];
47             $box[$j] = $tmp;
48         }
49
50         for($a = $j = $i = 0; $i < $string_length; $i++) {
51             $a = ($a + 1) % 256;
52             $j = ($j + $box[$a]) % 256;
53             $tmp = $box[$a];
54             $box[$a] = $box[$j];
55             $box[$j] = $tmp;
56             $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
57         }
58
59         if($operation == ‘DECODE‘) {
60             if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
61                 return substr($result, 26);
62             } else {
63                 return ‘‘;
64             }
65         } else {
66             return $keyc.str_replace(‘=‘, ‘‘, base64_encode($result));
67         }
68
69     }
时间: 2024-11-06 15:11:27

很赞的PHP字符串加密函数的相关文章

delphi简单单向字符串加密函数

delphi用久了有的时候得给密码加密一下,简单点就行了,这个函数还是不错的. const XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47); // function Enc(Str:String):String;//字符加密函数 var i,j:Integer;begin Result:=''; j:=0; for i:=1 to Length(Str) do begin Result:=Result+IntToHex(B

PHP对字符串加密解密的函数

加密解密在一个系统中的应用是非常常见的需求,PHP做的网站中,也会经常用到一些加密解密的时候.下面介绍一个比较好用的加密解密函数,收藏下,以后会用得到. <?php  $id = 132; $token = encrypt($id, 'E', 'nowamagic'); echo '加密:'.encrypt($id, 'E', 'nowamagic'); echo '<br />'; echo '解密:'.encrypt($token, 'D', 'nowamagic'); /*****

C#&nbsp;字符串加密解密函数

原文:C# 字符串加密解密函数 using System; using System.Text;using System.Security.Cryptography; using System.IO; //默认密钥向量private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; /// <summary> /// DES加密字符串 /// </summary> /// <par

javascript字符串加密解密函数

代码如下: /** * 加密函数 * @param str 待加密字符串 * @returns {string} */ function str_encrypt(str) { var c = String.fromCharCode(str.charCodeAt(0) + str.length); for (var i = 1; i < str.length; i++) { c += String.fromCharCode(str.charCodeAt(i) + str.charCodeAt(i

三国kill字符串加密算法分析

[文章标题]:三国kill字符串加密算法 [文章作者]: Ericky [作者博客]: http://blog.csdn.net/hk9259 [下载地址]: 百度下载 [保护方式]: 字符串加密 [作者声明]: 本人水平有限,若有不足错误之处请各位大侠指正 0x1 前言 据说这款游戏的老版本是可以直接修改其中相应的字符串来进行狸猫换太子,从而绕过检验并且达到内购破解的效果,如今时隔一年,该游戏为了防止被篡改或者其他,加强了对自身的加密,尤其把一些关键字符串所保护,强度是否值得起时间的考验,我们

PHP的几个常用加密函数

在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数: MD5加密: string md5 ( string $str [, bool $raw_output = false ] ) 1.md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,md5()则会返回原始的 16 位二进制格式报文摘要 2.md5()为单向加密,没有逆

PHP的几个常用加密函数(转载 https://jellybool.com/post/php-encrypt-functions)

PHP的几个常用加密函数 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数 MD5加密: string md5 ( string $str [, bool $raw_output = false ] ) 1.md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,默认为false,如果设置为true,md5()则会返回原始的 16 位二进制格式报文摘要 2.md

PHP中常用的字符串格式化函数总结

注意:在PHP中提供的字符串函数处理的字符串,大部分都不是在原字符串上修改,而是返回一个格式化后的新字符串. 一.取出空格和字符串填补函数 空格也是一个有效的字符,在字符串中也会占据一个位置.用户在表单输入数据时,经常在无意中会多输入一些无意义的空格.因此PHP脚本在接收到通过表单处理过来的数据时,首先处理的就是字符串中多余的空格,或者其他一些没有意义的符号.在PHP中可以通过ltrim().rtrim()和trim()函数来完成这项工作.这三个函数的语法格式相同,但作用有所不同.他们的语法格式

PHP的几个常用加密函数【转载】

转自 https://jellybool.com/post/php-encrypt-functions 在网站的开发过程中,常常需要对部分数据(如用户密码)进行加密,本文主要介绍PHP的几个常见的加密函数 MD5加密: string md5 ( string $str [, bool $raw_output = false ] ) 1.md5()默认情况下以 32 字符十六进制数字形式返回散列值,它接受两个参数,第一个为要加密的字符串,第二个为raw_output的布尔值,默认为false,如果