이 글에서는 주로 PHP에서 가역 암호화를 구현하는 방법을 소개하고, discuz의 암호화 원리를 활용하여 키를 통해 가역 암호화 기능을 구현했습니다. 그것이 모두에게 도움이 되기를 바랍니다.
자세한 내용은 다음과 같습니다.
여기서 소개하는 암호화 클래스는 역전이 가능하며, 키가 없으면 크랙이 어렵습니다.
PHP 코드는 다음과 같습니다:
<?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; } } ?>
암호화 및 복호화 논의:
<?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)); } } ?>
관련 권장 사항:
위 내용은 PHP 정보 가역 암호화 예시 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!