In diesem Artikel wird hauptsächlich die Methode zur Realisierung der reversiblen Verschlüsselung in PHP vorgestellt und auf dem Verschlüsselungsprinzip von discuz zurückgegriffen, um die Funktion der reversiblen Verschlüsselung durch Schlüssel zu realisieren. Ich hoffe, es hilft allen.
Die Details lauten wie folgt:
Die hier eingeführte Verschlüsselungsklasse kann umgekehrt werden, und es ist schwierig, sie ohne Schlüssel zu knacken.
Der PHP-Code lautet wie folgt:
<?php class encryptCalss { var $key=12; function encode($txt){ for($i=0;$i<strlen($txt);$i++){ $txt[$i]=chr(ord($txt[$i])+$this->key); } return $txt=urlencode(base64_encode(urlencode($txt))); } function decode($txt){ $txt=urldecode(base64_decode($txt)); for($i=0;$i<strlen($txt);$i++){ $txt[$i]=chr(ord($txt[$i])-$this->key); } return $txt; } } ?>
Discuz-Verschlüsselung und -Entschlüsselung:
<?php /** * * @param string $string 原文或者密文 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE * @param string $key 密钥 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 * @example * $a = authcode('abc', 'ENCODE', 'key'); * $b = authcode($a, 'DECODE', 'key'); // $b(abc) * * $a = authcode('abc', 'ENCODE', 'key', 3600); * $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 */ function authcode($string,$operation='DECODE',$key='',$expiry=0){ $ckey_length=4; $key=md5($key ? $key:"kalvin.cn"); $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)){ returnsubstr($result,26); }else{ return''; } }else{ return $keyc.str_replace('=','',base64_encode($result)); } } ?>
Verwandte Empfehlungen:
Der Kampf zwischen PHP-Verschlüsselung und -Entschlüsselung
Interner PHP-Verschlüsselungs- und Entschlüsselungsalgorithmus
Das obige ist der detaillierte Inhalt vonBeispiel für die gemeinsame Nutzung von PHP-Informationen zur umkehrbaren Verschlüsselung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!