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开发人员在以太坊/比特币等主流区块链的对接、去中心化应用开发、量化交易算法开发等应用场景中选择使用。
相关文章
- 一些基于PHP开发的免费开源可商用的CMS
- 【转】PHP网站(nginx、php-fpm、mysql) 用户权限解析
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
- PHP 图片进行压缩函数(GD库)
- php:使用XHProf查找PHP性能瓶颈
- 【Windows】任务计划去定时调用php程序
- PHP-5.4.4 安装 APC 启东php-fpm 提示
- FreeBSD 10 + Nginx 1.4.4 + PHP 5.5.9 + MySQL 5.6.15
- php解析mpp文件中的多级任务
- PHP判断是否在微信内部浏览器访问
- php:在linux上用sudo提升权限(centos 8 / PHP 7.4.2)
- [PHP] 如何让 php-fpm 的循环 echo 实时输出到浏览器
- [php-src] 窥探Php内核中的数组与面向对象
- php下的原生ajax请求
- PHP面试题:php读取文件内容的几种方法和函数?
- php双分支语句【三个数排序】
- php去除换行符的方法小结(PHP_EOL变量的使用)
- PHP中RabbitMQ之phpAmqplib实现(五