In this way, we can use this function for many purposes, such as: single sign-on token encrypted transmission, temporary password, etc.
Copy code Code As follows:
/**
* @param string $string original text or cipher text
* @param string $operation operation (ENCODE | DECODE), the default is DECODE
* @param string $key key
* @param int $expiry Ciphertext validity period, valid during encryption, in seconds, 0 is permanently valid
* @return string processed original text or base64_encoded ciphertext
*
* @example
*
* $a = authcode('abc', 'ENCODE', 'key');
* $b = authcode($a, 'DECODE', 'key'); // $b(abc)
*
* $a = authcode('abc', 'ENCODE', 'key', 3600);
* $b = authcode('abc', 'DECODE', 'key'); // Within one hour, $b(abc), otherwise $b is empty
*/
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) {
$ckey_length = 4;
// The random key length ranges from 0-32;
// Adding a random key can make the ciphertext irregular. Even if the original text and the key are exactly the same, the encryption result will be It will be different every time, increasing the difficulty of cracking.
// The larger the value, the greater the ciphertext change pattern. The ciphertext change = 16 to the power of $ckey_length
// When this value is 0, no random key will be generated
$key = md5($key ? $key : EABAX::getAppInf('KEY'));
$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 {
return $keyc.str_replace('=', '', base64_encode($result));
}
}
http://www.bkjia.com/PHPjc/321662.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/321662.htmlTechArticleIn this way, we can use this function for many purposes, such as: single sign-on token encrypted transmission, Temporary password, etc. Copy the code as follows: /** * @param string $string original...