This article mainly introduces the use of Discuz encryption and decryption function and Chinese annotation, we refer to the use of the bar
Code as follows: <?php/** * $string plaintext or ciphertext * $operation encrypt encode or decrypt decode * $key key * $expiry key validity */ function Authcode ($string, $operation = ' DECODE ', $key = ', $expiry = 0} { //dynamic key length, same plaintext The generation of different ciphertext is relying on dynamic key //join with the secret key, can make the cipher without any regularity, even if the original and key is identical, the encryption results will be different each time, increase the difficulty of cracking. //value, the greater the ciphertext change law, ciphertext change = 16 $ckey _length //When this value is 0 o'clock, does not produce with the secret key $ckey _length = 4; //Key //$GLOBALS [' Discuz_auth_key '] Here you can modify the $key = MD5 ($key? $key : $GLOBALS [' Discuz_auth_key ']); //Key A will participate in encryption and decryption $keya = MD5 (substr ($key, 0, 16)); //key B will be used to do data integrity validation $KEYB = MD5 (substr ($key, 16, 16)); //key C for change-generated redaction $KEYC = $ckey _length? ($operation = = ' DECODE ' substr ($string, 0, $ckey _length): substr (MD5 (Microtime ()),-$ckey _length)): "; //participation key $cryptkey = $keya. MD5 ($keya. $KEYC); $key _length = strlen ($cryptkey); //Clear text, the first 10 bits used to save the timestamp, verify the validity of the data when decrypting, 10 to 26 bits to save $keyb (key B), decryption will verify data integrity through this key //If it is decoded, it will be from the first $ckey_ Length bit start, because the ciphertext before $ckey_length bit to save the dynamic key to ensure decryption correct $string = $operation = = ' DECODE '? Base64_decode (substr ($string, $ckey _length)): sprintf ('%010d ', $expiry? $expiry + Time (): 0). substr (MD5 ($string. $keyb , 0). $string; $string _length = strlen ($string); $result = '; $box = range (0, 255); $rndkey = array (); //generating key book for ($i = 0; $i <= 255 $i + +) { $rndkey [$i] = Ord ($cryp tkey[$i% $key _length]); } //With fixed algorithm, scrambling key book, increase randomness, it seems very complicated, actually will not increase the intensity 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 plus decryption section 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; //from the key book to the key to the different or to the character $result. = Chr (ord ($string [$i]) ^ ($box [($bo x[$a] + $box [$j])% 256]); } if ($operation = = ' DECODE ') { //substr ($result, 0, 10) = 0 Validating data Validity //substr ($result, 0,)-time () > 0 Validation data validation //substr ($r Esult = = substr (MD5 (substr ($result,). $keyb), 0, 16) Verify data integrity //Validate data validation, see unencrypted plaintext format if (substr ($result, 0,) = 0 | | substr ($result, 0, 10)-time () > 0) && substr ($result) = = substr (MD5 (substr ($result,). $keyb), 0) { &nbs P return substr ($result, 26); } else { return '; ' } &N Bsp } else { //Keep the dynamic key in the ciphertext, which is why the same plaintext, production of different ciphertext can be decrypted after the reason of the //Because of the encrypted Redaction may be some special characters, the copy process may be lost, so use base64 encoding return $KEYC. Str_replace (' = ', ', Base64_encode ($result) ); } $a = www.jb51.net; $b = Authcode ($a, "ENCODE", "abc123"); echo $b. " <br/> "; Echo Authcode ($b, "DECODE", "abc123");?>