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), 8, 16);  
  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. * @example authcode(serialize(array('mail' => $data['mail'])), 'ENCODE', APPKEY); 
  9. *  $a = authcode('abc', 'ENCODE', 'key'); 
  10. *  $b = authcode($a, 'DECODE', 'key');  // $b(abc) 
  11. *  $a = authcode('abc', 'ENCODE', 'key', 3600); 
  12. *  $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 
  13. */  
  14. function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600)   
  15. {  
  16.     $ckey_length = 4;     
  17.     // 随机密钥长度 取值 0-32;  
  18.     // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。  
  19.     // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方  
  20.     // 当此值为 0 时,则不产生随机密钥  
  21.   
  22.     $key = md5($key ? $key : 'KEY');  
  23.     $keya = md5(substr($key, 0, 16));  
  24.     $keyb = md5(substr($key, 16, 16));  
  25.     $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';  
  26.   
  27.     $cryptkey = $keya.md5($keya.$keyc);  
  28.     $key_length = strlen($cryptkey);  
  29.   
  30.     $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;  
  31.     $string_length = strlen($string);  
  32.   
  33.     $result = '';  
  34.     $box = range(0, 255);  
  35.   
  36.     $rndkey = array();  
  37.     for($i = 0; $i <= 255; $i++)   
  38.     {  
  39.         $rndkey[$i] = ord($cryptkey[$i % $key_length]);  
  40.     }  
  41.   
  42.     for($j = $i = 0; $i < 256; $i++)   
  43.     {  
  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.     {  
  52.         $a = ($a + 1) % 256;  
  53.         $j = ($j + $box[$a]) % 256;  
  54.         $tmp = $box[$a];  
  55.         $box[$a] = $box[$j];  
  56.         $box[$j] = $tmp;  
  57.         $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));  
  58.     }  
  59.   
  60.     if($operation == 'DECODE')   
  61.     {  
  62.         if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16))   
  63.         {  
  64.             return substr($result, 26);  
  65.         }   
  66.         else   
  67.         {  
  68.             return '';  
  69.         }  
  70.     }   
  71.     else   
  72.     {  
  73.         return $keyc.str_replace('=', '', base64_encode($result));  
  74.     }  
  75. }  
  76. ?>  
时间: 2024-09-17 04:08:43

PHP开源加密解密库(带超时)的相关文章

【C/C++学院】0801-重定向以及文件扫描/二进制加密解密/简单加密/按照密码加密/动态库与静态库

重定向以及文件扫描 #define _CRT_SECURE_NO_WARNINGS//关闭安全检查 #include<stdio.h> #include<stdlib.h> void main1() { char str[100] = { 0 }; scanf("%s", str); printf("str=%s\n", str); system(str); } void main2() { char str[100] = { 0 }; fs

带密匙的php加密解密示例分享_php实例

复制代码 代码如下: <?php $id = "http://www.jb51.net";$token = encrypt($id, 'E', 'jb51');echo '加密:'.encrypt($id, 'E', 'jb51');echo '<br />';echo '解密:'.encrypt($token, 'D', 'jb51'); /***************************************************************

网站安全之ASP程序加密/解密方法大揭密

安全|程序|加密|解密 如今,用ASP技术构建的网站随处可见.由于ASP脚本是在服务器上解释执行的(无法编译),因此你辛苦开发出来的ASP代码,很容易被人拷去任意修改,如何保护ASP源代码呢?这是每个ASP站长都会遇到的难题,网上求解这类问题的帖子非常多,下面我们就来谈谈ASP程序的加密方法. 一.如何加密ASP程序? 目前对ASP程序的加密方法主要有三种:脚本编码器(SRCENC.EXE)加密.组件加密.自编程序加密,下面我们就来展开介绍这三种加密方法. 1.使用微软的MS Script En

PHP rsa加密解密使用方法

  PHP rsa加密解密使用方法        这篇文章主要介绍了PHP rsa加密解密使用方法,本文讲解了生成公钥.私钥及PHP中使用生成的公钥.私钥进行加密解密实例,需要的朋友可以参考下 php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具open

php rsa加密解密使用详解

 1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令:   代码如下: openssl genrsa -out rsa_private_key.pem 1024 openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out p

PHP rsa加密解密使用方法_php实例

php服务端与客户端交互.提供开放api时,通常需要对敏感的部分api数据传输进行数据加密,这时候rsa非对称加密就能派上用处了,下面通过一个例子来说明如何用php来实现数据的加密解密 1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: openssl genrsa -out rsa_private_key.pem 1024 o

php rsa加密解密使用详解_php实例

1.加密解密的第一步是生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可以) 下载开源RSA密钥生成工具openssl(通常Linux系统都自带该程序),解压缩至独立的文件夹,进入其中的bin目录,执行以下命令: 复制代码 代码如下: openssl genrsa -out rsa_private_key.pem 1024 openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out

PHP加密扩展库Mcrypt安装和实例_php实例

mcrypt简单介绍PHP程序员们在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障.PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库Mcrypt和Mhash.其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原.mcrypt 是 php 里面重要的加密支持扩展库,linux环境下:该库在默认情况下不开启.window环境下:PHP>=5.3,默认开启mcrypt扩展.1.Mcrypt()库的安装 mcypt是一

Windows 8 Store Apps学习(31) 加密解密: 哈希算法, 对称算法

介绍 重新想象 Windows 8 Store Apps 之 加密解密 hash 算法(MD5, SHA1, SHA256, SHA384, SHA512) hmac 算法(MD5, SHA1, SHA256, SHA384, SHA512) 本地数据的加密解密 对 称算法(AES, DES, 3DES, RC2, RC4) 示例 1.演示如何使用 hash 算法(MD5, SHA1, SHA256, SHA384, SHA512) Crypto/Hash.xaml.cs /* * 演示如何使用