Home  >  Article  >  Backend Development  >  PHP string encryption function (encrypt and restore string within specified time, cannot be restored after timeout)_PHP tutorial

PHP string encryption function (encrypt and restore string within specified time, cannot be restored after timeout)_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:38:54833browse

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));
}
}

www.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...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn