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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介:

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. ?>  
相关文章
|
15天前
|
算法 安全 数据安全/隐私保护
Crypto++库支持多种加密算法
【10月更文挑战第29天】Crypto++库支持多种加密算法
46 4
|
3月前
|
存储 算法 数据库
使用python hashlib模块给明文字符串加密,以及如何撞库破解密码
`hashlib` 是 Python 中用于实现哈希功能的模块,它可以将任意长度的输入通过哈希算法转换为固定长度的输出,即散列值。该模块主要用于字符串加密,例如将用户名和密码转换为不可逆的散列值存储,从而提高安全性。`hashlib` 提供了多种哈希算法,如 `md5`、`sha1`、`sha256` 等。
58 1
|
1月前
|
Shell 网络安全 数据安全/隐私保护
suuk-s.php.jpg-python 库劫持
suuk-s.php.jpg-python 库劫持
26 0
|
2月前
|
开发框架 前端开发 中间件
开源PHP项目
【9月更文挑战第2天】开源PHP项目
51 4
|
2月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
3月前
|
Ubuntu Linux 数据安全/隐私保护
使用Cython库包对python的py文件(源码)进行加密,把python的.py文件生成.so文件并调用
本文介绍了在Linux系统(Ubuntu 18.04)下将Python源代码(`.py文件`)加密为`.so文件`的方法。首先安装必要的工具如`python3-dev`、`gcc`和`Cython`。然后通过`setup.py`脚本使用Cython将`.py文件`转化为`.so文件`,从而实现源代码的加密保护。文中详细描述了从编写源代码到生成及调用`.so文件`的具体步骤。此方法相较于转化为`.pyc文件`提供了更高的安全性。
143 2
|
3月前
|
网络协议 API PHP
PhalApi:在宝塔一键安装部署PHP开源接口框架的教程
要在宝塔面板上一键安装部署PhalApi开源接口框架,首先进入宝塔软件商店,切换到“一键部署”选项,搜索“phalapi”并点击“一键部署”。安装时需填写接口域名、数据库名及密码,提交后等待安装完成。安装成功后可在宝塔面板中查看新站点和源代码目录,并通过DNS解析设置访问接口域名,如`http://myapi.phalapi.net/`。默认开启的调试模式便于测试,可通过修改`config/sys.php`中的`debug`值为`false`关闭。最后,在源代码中开发自己的PHP接口,PhalApi会自动生成在线接口文档,方便后续调用与维护。更多详细教程可参考官方文档。
|
4月前
|
安全 PHP 开发者
PHP的开源代码如何影响其安全性?
【7月更文挑战第15天】PHP的开源代码如何影响其安全性?
42 1
|
5月前
|
Java PHP 数据安全/隐私保护
php和Java配合 aes
php和Java配合 aes加密
43 1