PHP encryption and decryption string functions frequently used in programs
The code is as follows:
/********************************************************************* function Name: Encrypt function: Encrypt decryption string use method: Encryption: Encrypt (
' Str ', ' E ', ' nowamagic ';
Decryption: Encrypt (' encrypted string ', ' D ', ' nowamagic ');
Parameter description: $string: Need to encrypt the decrypted string $operation: To determine whether encryption or decryption: E: Encryption D: Decryption $key: Encryption key (key); /function Encrypt ($string, $operation, $key =
"{$key =md5 ($key);
$key _length=strlen ($key);
$string = $operation = = ' D ' Base64_decode ($string): substr (MD5 ($string. $key), 0,8). $string;
$string _length=strlen ($string);
$rndkey = $box =array ();
$result = ';
For ($i =0 $i <=255; $i + +) {$rndkey [$i]=ord ($key [$i% $key _length]);
$box [$i]= $i;
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 = = = ' D ') {if (substr ($result, 0,8) ==substr (MD5 (substr ($result, 8). $key), 0,8)) {return substr ($re
sult,8);
else {return ';
} else {return str_replace (' = ', ', ' Base64_encode ($result));
}
}
How to use:
$id = 132;
$token = Encrypt ($id, ' E ', ' a ');
Echo ' encrypt: '. Encrypt ($id, ' E ', ' a ');
echo ' <br/> ';
Echo ' Decrypt: '. Encrypt ($token, ' D ', ' a ');
very authcode encryption function , discuz! Classic Code (with detailed):
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_ The length bit holds the dynamic key to ensure the decryption is 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 ();
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] + $rn
dkey[$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, -time () > 0) && substr ($result) = = substr (MD5 (substr ($result,). $keyb), 0) {retur
n substr ($result, 26);
else {return '; } else {//Keep the dynamic key in the ciphertext, which is why the sameArticle, the production of different ciphertext can decrypt the reason//because the encrypted ciphertext may be some special characters, the copy process may be lost, so use base64 code return $KEYC. Str_replace (' = ', ', Base64_encode ($re
Sult));
}
}
$string in function Authcode ($string, $operation, $key, $expiry): string, plaintext, or ciphertext; $operation: decode means decryption, other means encryption; $key: Key; $ Expiry: The validity of redaction.
Usage:
$str = ' abcdef ';
$key = ' www.helloweba.com ';
Echo Authcode ($str, ' ENCODE ', $key, 0); Encryption
$str = ' 56f4yer1di2wtzwmqsfpps9hwyojnfp2mpc8sohrrxo7bok ';
Echo Authcode ($str, ' DECODE ', $key, 0); Decrypt
3, add the decryption function encrypt ():
function Encrypt ($string, $operation, $key = ') {$key =md5 ($key);
$key _length=strlen ($key);
$string = $operation = = ' D ' Base64_decode ($string): substr (MD5 ($string. $key), 0,8). $string;
$string _length=strlen ($string);
$rndkey = $box =array ();
$result = ';
For ($i =0 $i <=255; $i + +) {$rndkey [$i]=ord ($key [$i% $key _length]);
$box [$i]= $i;
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 = = = ' D ') {if (substr ($result, 0,8) ==substr (MD5 (substr ($result, 8). $key), 0,8)) {return substr ($res
ult,8);
}else{return ";
}else{return str_replace (' = ', ', Base64_encode ($result)); }
}
function Encrypt ($string, $operation, $key) in $string: Need to encrypt the decrypted string, $operation: The judge is encrypted or decrypted, E is encrypted, d is decryption; $key: Key.
Usage:
$STR = ' abc ';
$key = ' www.helloweba.com ';
$token = Encrypt ($str, ' E ', $key);
Echo ' encrypt: '. Encrypt ($str, ' E ', $key);
Echo ' Decrypt: '. Encrypt ($str, ' D ', $key);