2 more classic PHP encryption and decryption functions

In projects, sometimes we need to use PHP to encrypt specific information, that is, to generate an encrypted string through an encryption algorithm. This encrypted string can be decrypted through a decryption algorithm, so that the program can process the decrypted information. The most common applications are user login and some API data exchange scenarios.

The author has collected some classic PHP encryption and decryption function codes and shared them with you. The encryption and decryption principle is generally through a certain encryption and decryption algorithm, the key is added to the algorithm, and the encryption and decryption result is finally obtained. 1. Very powerful authcode encryption function, Discuz! Classic code (with detailed explanation):

Copy code function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
// Dynamic key length, the same plaintext will generate different ciphertext by relying on the dynamic key
$ckey_length = 4;

// 密匙   
$key = md5($key ? $key : $GLOBALS['discuz_auth_key']);   
   
// 密匙a会参与加解密   
$keya = md5(substr($key, 0, 16));   
// 密匙b会用来做数据完整性验证   
$keyb = md5(substr($key, 16, 16));   
// 密匙c用于变化生成的密文   
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): 

substr(md5(microtime()), -$ckey_length)) : '';
// key involved in the operation
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
/ / Plain text, the first 10 bits are used to save the timestamp, the data validity is verified when decrypting, and 10 to 26 bits are used to save $keyb (key b), // the key will be used to verify the data integrity when decrypting
// if If it is decoding, it will start from the $ckey_length bit, because the dynamic key is stored in the $ckey_length bit before the ciphertext to ensure correct decryption
$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();
// generate keybook
for($i = 0; $i <= 255; $i++) {
$rndkey[$i ] = ord($cryptkey[$i % $key_length]);
}
// Using a fixed algorithm, scramble the key book and increase randomness, it seems very complicated, but it does not actually increase the strength of the ciphertext
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$ box[$j] = $tmp;
}
// Core encryption and decryption part
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;
// XOR the key from the keybook and convert it to the character
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box [$j]) % 256]));
}
if($operation == 'DECODE') {
// Verify data validity, see the format of unencrypted plaintext
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 {
// Save the dynamic key in the ciphertext, which is why the same plaintext can be decrypted after producing different ciphertexts
//Because the encrypted ciphertext may be some special characters, the copying process may be lost , so use base64 encoding
return $keyc.str_replace('=', '', base64_encode($result));
}
}

$string in the function authcode($string, $operation, $key, $expiry): string, plaintext or ciphertext; $operation: DECODE means decryption, other means encryption; $key: key; $expiry: ciphertext Validity period.

usage:

$str = 'abcdef'; $key = 'www.helloweba.com'; echo authcode($str,'ENCODE',$key,0); //encryption $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; echo authcode($str, 'DECODE',$key,0); //Decryption 2, encryption and decryption function encrypt():

base64_encode($result)); } } Copy code function encrypt($string,$operation,$key) in $string: the string to be encrypted and decrypted; $operation: determine whether to encrypt or decrypt, E means encryption, D means decryption ; $key: key. usage:

$str = 'abc'; $key = 'www.helloweba.com'; $token = encrypt($str, 'E', $key); echo 'encrypt:'.encrypt($str, 'E', $ key); echo 'decryption: '.encrypt($str, 'D', $key);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325259984&siteId=291194637