一款强大的PHP 加密解密模块

学海无涯 · 2018-11-27

代码介绍:

来自可道云的加密模块!可用于对数据请求的加密验证等。这个好处在于,用它来进行加密,同一个字符串,每次加密后,得出的结果都是不一样的,这就大大加强了数据安全性。同时还可设定加密后数据的有效期,是不是很不错!

使用方法:

将下面的模块代码保存为 Mcrypt.class.php,然后在你需要用到的地方通过 require 的方式引入:

require('Mcrypt.class.php'); 加密一个数据的方法

echo Mcrypt::encode('要加密的内容','密匙'); 解密数据的方法:

echo Mcrypt::decode('密文','加密时的密匙');

模块完整代码

<?php
 
/*
* @link http://kodcloud.com/
* @author warlee | e-mail:kodcloud@qq.com
* @copyright warlee 2014.(Shanghai)Co.,Ltd
* @license http://kodcloud.com/tools/licenses/license.txt
*------
* 字符串加解密类;
* 一次一密;且定时解密有效
* 可用于加密&动态key生成
* demo:    
* 加密:echo Mcrypt::encode('abc','123');
* 解密:echo Mcrypt::decode('9f843I0crjv5y0dWE_-uwzL_mZRyRb1ynjGK4I_IACQ','123');
*/
 
class Mcrypt{
    private static 
$default_key 'a!takA:dlmcldEv,e';
    
    
/**
     * 字符加密,一次一密,可定时解密有效
     * 
     * @param string $string 原文
     * @param string $key 密钥
     * @param int $expiry 密文有效期,单位s,0 为永久有效
     * @return string 加密后的内容
     */
    
public static function encode($string,$key ''$expiry 0){
        
$ckeyLength 4;
        
$key md5($key $key self::$default_key); //解密密匙
        
$keya md5(substr($key016));         //做数据完整性验证  
        
$keyb md5(substr($key1616));         //用于变化生成的密文 (初始化向量IV)
        
$keyc substr(md5(microtime()), - $ckeyLength);
        
$cryptkey $keya md5($keya $keyc);  
        
$keyLength strlen($cryptkey);
        
$string sprintf('%010d'$expiry $expiry time() : 0).substr(md5($string $keyb), 016) . $string;
        
$stringLength strlen($string);
 
        
$rndkey = array();    
        for(
$i 0$i <= 255$i++) {    
            
$rndkey[$i] = ord($cryptkey[$i $keyLength]);
        }
 
        
$box range(0255);    
        
// 打乱密匙簿,增加随机性
        
for($j $i 0$i 256$i++) {
            
$j = ($j $box[$i] + $rndkey[$i]) % 256;
            
$tmp $box[$i];
            
$box[$i] = $box[$j];
            
$box[$j] = $tmp;
        }    
        
// 加解密,从密匙簿得出密匙进行异或,再转成字符
        
$result '';
        for(
$a $j $i 0$i $stringLength$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]));
        }
        
$result $keyc str_replace('='''base64_encode($result));
        
$result str_replace(array('+''/''='),array('-''_''.'), $result);
        return 
$result;
    }
 
    
/**
     * 字符解密,一次一密,可定时解密有效
     * 
     * @param string $string 密文
     * @param string $key 解密密钥
     * @return string 解密后的内容
     */
    
public static function decode($string,$key '')
    {
        
$string str_replace(array('-''_''.'),array('+''/''='), $string);
        
$ckeyLength 4;
        
$key md5($key $key self::$default_key); //解密密匙
        
$keya md5(substr($key016));         //做数据完整性验证  
        
$keyb md5(substr($key1616));         //用于变化生成的密文 (初始化向量IV)
        
$keyc substr($string0$ckeyLength);
        
$cryptkey $keya md5($keya $keyc);  
        
$keyLength strlen($cryptkey);
        
$string base64_decode(substr($string$ckeyLength));
        
$stringLength strlen($string);
 
        
$rndkey = array();    
        for(
$i 0$i <= 255$i++) {    
            
$rndkey[$i] = ord($cryptkey[$i $keyLength]);
        }
 
        
$box range(0255);
        
// 打乱密匙簿,增加随机性
        
for($j $i 0$i 256$i++) {
            
$j = ($j $box[$i] + $rndkey[$i]) % 256;
            
$tmp $box[$i];
            
$box[$i] = $box[$j];
            
$box[$j] = $tmp;
        }
        
// 加解密,从密匙簿得出密匙进行异或,再转成字符
        
$result '';
        for(
$a $j $i 0$i $stringLength$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 ((
substr($result010) == || substr($result010) - time() > 0)
        && 
substr($result1016) == substr(md5(substr($result26) . $keyb), 016)
        ) {
            return 
substr($result26);
        } else {
            return 
'';
        } 
    }
}

IT 技术
2010 - 2024 在路上. All Rights Reserved.
Theme Jasmine by Kent Liao