zoukankan      html  css  js  c++  java
  • PHP加密字符串函数(解密)

    我们常用的php加密函数

    function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0){
    	if($operation == 'DECODE') {
    		$string = str_replace('[a]','+',$string);
    		$string = str_replace('[b]','&',$string);
    		$string = str_replace('[c]','/',$string);
    	}
    
    	$ckey_length = 4;
    	$key = md5($key ? $key : 'livcmsencryption ');
    	$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 {
    		$ustr = $keyc.str_replace('=', '', base64_encode($result));
    		$ustr = str_replace('+','[a]',$ustr);
    		$ustr = str_replace('&','[b]',$ustr);
    		$ustr = str_replace('/','[c]',$ustr);
    		return $ustr;
    	}
    
    }
    

    使用发放

    
    $str = 'www.liqingbo.cn';
    $res = authcode($str,'encode','liqingbo');
    print_r($res);
    
    $res = authcode($res,'DECODE','liqingbo');
    print_r($res);
    

    输出:

    94begJWg2pTYHRsVPHz0AJOTTeQb9ovXGX2sCdtNrh[c]OWioMWt0tvoXjaSY
    www.liqingbo.cn
    

    如果秘钥liqingbo不一致,解密出来的是空

    自知者不怨人,知命者不怨天。
  • 相关阅读:
    C#
    C#
    ssh学习笔记
    (已解决)Could not open '/var/lib/nova/mnt/*/volume-*': Permission denied
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    如何在linux下安装idea
    The system has no LUN copy license
    调整mysql数据库最大连接数
    mysql数据库编码问题
    cinder支持nfs快照
  • 原文地址:https://www.cnblogs.com/liqingbo/p/14860035.html
Copyright © 2011-2022 走看看