zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP开源加密解密库(带超时)

2023-09-14 08:59:47 时间

phpseclib 是一组PHP语言实现的用于进行DES, 3DES, RC2, RC4, Rijndael, Twofish,Blowfish,AES, SSH-1和 SSH-2,非对称密钥算法RSA 等标准的实现,兼容Java,.NET等 http://phpseclib.sourceforge.net/documentation/

http://phpseclib.sourceforge.net/index.html

从discuz里面发现了一个很牛的加密解密函数。此函数的厉害之处在于可以在指定时间内加密还原字符串,超时无法还原。

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

16位MD5加密实现,解决32位太长的问题


* @param string $string 原文或者密文  * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE  * @param string $key 密钥  * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效  * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文  * @example authcode(serialize(array(mail =  $data[mail])), ENCODE, APPKEY);  *  $a = authcode(abc, ENCODE, key);  *  $b = authcode($a, DECODE, key);  // $b(abc)  *  $a = authcode(abc, ENCODE, key, 3600);  *  $b = authcode(abc, DECODE, key); // 在一个小时内,$b(abc),否则 $b 为空  function authcode($string, $operation = DECODE, $key = , $expiry = 3600)        $ckey_length = 4;          // 随机密钥长度 取值 0-32;       // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。       // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方       // 当此值为 0 时,则不产生随机密钥       $key = md5($key ? $key : KEY);       $keya = md5(substr($key, 0, 16));       $keyb = md5(substr($key, 16, 16));       $keyc = $ckey_length ? ($operation == DECODE ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ;       $cryptkey = $keya.md5($keya.$keyc);       $key_length = strlen($cryptkey);       $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 = ;       $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 = $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($result, 0, 10) - time()   0)   substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16))            {               return substr($result, 26);           }            else            {               return ;           }       }        else        {           return $keyc.str_replace(=, , base64_encode($result));       }  
PHP解析Markdown库,parsedown扩展自定义语法 在开发系统过程中,有些信息编写储存是使用Markdown通用语法,但由于各个平台的会新增一些独特规范,一般的解析库都是只包含了标准语法,对于自定义语法是不支持解析的(如vuepress文档系统中的::: tip 提示语块) 我们从vuepress迁移文档系统到自己实现的文档系统时,特定标签无法解析,需要扩展解析库的功能,来完成自定义语法。 PHP常见的Markdown解析库是parsedown。这个库非常的轻量,只有一个文件,无需依赖其他扩展。
5个主流的PHP区块链开发库 本文介绍5个最常用的PHP区块链开发库,适合PHP开发人员在以太坊/比特币等主流区块链的对接、去中心化应用开发、量化交易算法开发等应用场景中选择使用。