Included some of the more classic PHP encryption and decryption function code, to share with you. Encryption and decryption principle is generally through a certain encryption and decryption algorithm, the key into the algorithm, the end of the encryption and decryption results.
function Authcode ($string, $operation = ' DECODE ', $key = ', $expiry = 0) {//dynamic key length, the same plaintext will generate different ciphertext is dependent on the dynamic key $ckey _
length = 4;
Key $key = MD5 ($key $key: $GLOBALS [' Discuz_auth_key ']);
Key A will participate in the encryption and decryption $keya = MD5 (substr ($key, 0, 16));
Key B is used to do data integrity validation $keyb = MD5 (substr ($key, 16, 16)); Key C used to change the generated ciphertext $KEYC = $ckey _length?
($operation = = ' DECODE ' substr ($string, 0, $ckey _length): substr (MD5 (Microtime ()),-$ckey _length)): ";
The key $cryptkey = $keya. MD5 ($keya. $KEYC) that participate in the operation;
$key _length = strlen ($cryptkey); PlainText, the first 10 bits to save the timestamp, verify the validity of the data when decrypting, 10 to 26 bits to save the $KEYB (key B),//decryption will verify the data integrity through this key///If it is decoded, it will start from the first $ckey_length, because the ciphertext before $ckey_le Ngth bit saves dynamic key to ensure decryption is correct $string = $operation = = ' DECODE '? Base64_decode (substr ($string, $ckey _length)): sprintf ('%010d ', $expiry? $expiry + Time (): 0). substr (MD5 ($string. $key
b), 0. $string;
$string _length = strlen ($string);
$result = ';
$box = Range (0, 255); $rndkey = Array ();
Generate the key book for ($i = 0; $i <= 255 $i + +) {$rndkey [$i] = Ord ($cryptkey [$i% $key _length]); //using fixed algorithm to disrupt the key book, increase randomness, it seems very complex, in fact, will not increase the intensity of the ciphertext for ($j = $i = 0; $i < 256 $i + +) {$j = ($j + $box [$i] + $rnd
key[$i])% 256;
$tmp = $box [$i];
$box [$i] = $box [$j];
$box [$j] = $tmp;
}//Core 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;
The key is derived from the key book, and then converted to the character $result. = Chr (ord ($string [$i]) ^ ($box [($box [$a] + $box [$j]) (% 256])); } if ($operation = = ' DECODE ') {//Validate data validity, see unencrypted plaintext format if (substr ($result, 0,) = 0 | | substr ($result, 0, 1 0)-time () > 0) && substr ($result) = = substr (MD5 (substr ($result,) ($KEYB), 0)) {return
substr ($result, 26);
else {return '; } else {//Keep the dynamic key in the ciphertext, which is why the same clear text can be decrypted after the production of different ciphertext/Because the encrypted ciphertext may be some special characters, the copy process may be lost, so use the Base64 code return $KEYC. Str_replace (' = ', ', Base64_encode ($result));
}
}
I hope this article will help you with your PHP programming.