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

简介:

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位太长的问题

Java代码   收藏代码
  1. function MD5hex($str) {  
  2.     return substr(md5($str), 816);  
  3. }  

在这里记录一下,方便以后应用。

Java代码   收藏代码
  1. <?php  
  2. /** 
  3. * @param string $string 原文或者密文 
  4. * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE 
  5. * @param string $key 密钥 
  6. * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 
  7. * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 
  8. * 
  9. * @example authcode(serialize(array('mail' => $data['mail'])), 'ENCODE', APPKEY); 
  10. * 
  11. *  $a = authcode('abc', 'ENCODE', 'key'); 
  12. *  $b = authcode($a, 'DECODE', 'key');  // $b(abc) 
  13. * 
  14. *  $a = authcode('abc', 'ENCODE', 'key', 3600); 
  15. *  $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 
  16. */  
  17. function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600)   
  18. {  
  19.     $ckey_length = 4;     
  20.     // 随机密钥长度 取值 0-32;  
  21.     // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。  
  22.     // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方  
  23.     // 当此值为 0 时,则不产生随机密钥  
  24.   
  25.     $key = md5($key ? $key : 'KEY');  
  26.     $keya = md5(substr($key, 016));  
  27.     $keyb = md5(substr($key, 1616));  
  28.     $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';  
  29.   
  30.     $cryptkey = $keya.md5($keya.$keyc);  
  31.     $key_length = strlen($cryptkey);  
  32.   
  33.     $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 016).$string;  
  34.     $string_length = strlen($string);  
  35.   
  36.     $result = '';  
  37.     $box = range(0255);  
  38.   
  39.     $rndkey = array();  
  40.     for($i = 0; $i <= 255; $i++)   
  41.     {  
  42.         $rndkey[$i] = ord($cryptkey[$i % $key_length]);  
  43.     }  
  44.   
  45.     for($j = $i = 0; $i < 256; $i++)   
  46.     {  
  47.         $j = ($j + $box[$i] + $rndkey[$i]) % 256;  
  48.         $tmp = $box[$i];  
  49.         $box[$i] = $box[$j];  
  50.         $box[$j] = $tmp;  
  51.     }  
  52.   
  53.     for($a = $j = $i = 0; $i < $string_length; $i++)   
  54.     {  
  55.         $a = ($a + 1) % 256;  
  56.         $j = ($j + $box[$a]) % 256;  
  57.         $tmp = $box[$a];  
  58.         $box[$a] = $box[$j];  
  59.         $box[$j] = $tmp;  
  60.         $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));  
  61.     }  
  62.   
  63.     if($operation == 'DECODE')   
  64.     {  
  65.         if((substr($result, 010) == 0 || substr($result, 010) - time() > 0) && substr($result, 1016) == substr(md5(substr($result, 26).$keyb), 016))   
  66.         {  
  67.             return substr($result, 26);  
  68.         }   
  69.         else   
  70.         {  
  71.             return '';  
  72.         }  
  73.     }   
  74.     else   
  75.     {  
  76.         return $keyc.str_replace('=''', base64_encode($result));  
  77.     }  
  78. }  
  79. ?>  
相关文章
|
3月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
5月前
|
JavaScript Linux PHP
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
189 3
composer如何安装以及举例在PHP项目中使用Composer安装TCPDF库-优雅草卓伊凡
|
5月前
|
存储 缓存 安全
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
php项目源码加密之Zend Guard Loader加密的代码解密可能性很小-优雅草卓伊凡
190 2
|
算法 安全 数据安全/隐私保护
Crypto++库支持多种加密算法
【10月更文挑战第29天】Crypto++库支持多种加密算法
525 4
|
8月前
|
PHP
基于PHP开发的资源库系统源码
基于PHP开发的资源库系统源码
183 13
|
8月前
|
Linux PHP iOS开发
PHP-Raylib 视 频 游 戏 编 程 库
php-raylib 是基于 PHP-FFI 绑定的 raylib-v5.5 游戏开发库,让 PHP 开发者轻松实现视频游戏编程。相比仅支持 4.+ 版本的原库,本项目适配最新 5.5 版本,并提供友好文档与示例代码(如窗口初始化、文本绘制等)。支持 PHP 7.4+ 和多平台(Windows、Linux、macOS),可通过 Composer 快速安装。欢迎贡献和完善![查看文档](http://raylib.kllxs.top/) 或访问仓库(GitHub/Gitee/Gitcode)。
PHP-Raylib 视 频 游 戏 编 程 库
|
存储 算法 数据库
使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
`hashlib` 是 Python 中用于实现哈希功能的模块,它可以将任意长度的输入通过哈希算法转换为固定长度的输出,即散列值。该模块主要用于字符串加密,例如将用户名和密码转换为不可逆的散列值存储,从而提高安全性。`hashlib` 提供了多种哈希算法,如 `md5`、`sha1`、`sha256` 等。
308 1
|
12月前
|
Linux PHP 数据安全/隐私保护
2024授权加密系统PHP网站源码
2024授权加密系统PHP网站源码
327 58
|
9月前
|
JSON API Go
基于责任链与策略模式的轻量级PHP日志库设计
项目日志乱成一团,bug 时好时坏,服务器问题难以复现?我写了个 PHP 日志系统,第一时间发现问题,避免跑路。实现了责任链模式+策略模式,让日志存储更灵活,支持多种输出方式。
|
10月前
|
监控 定位技术 PHP
使用PHP接入纯真IP库:实现IP地址地理位置查询
本文介绍了如何使用PHP接入纯真IP库(QQWry),实现IP地址的地理位置查询。纯真IP库是一个轻量级的IP数据库,数据格式简单,查询速度快,适合Web应用。首先,下载并放置`QQWry.dat`文件到项目目录。接着,通过编写PHP类解析该文件,实现IP查询功能。最后,提供了一个完整的案例演示,展示如何查询IP地址对应的国家和地区信息。该工具适用于用户地理位置分析、访问日志分析和风控系统等场景,具有轻量级、查询速度快、数据更新方便等优点。