재인쇄: https://www.cnblogs.com/wicub/p/6395349.html
이 기사에서는 주로 두 가지 고전적인 PHP 암호화 및 복호화 기능의 공유를 소개합니다. 하나는 Discuz입니다. !의 인증 코드 암호화 기능(자세한 분해 포함) 중 하나는 encrypt() 기능이며 둘 다 상대적으로 고전적이므로 도움이 필요한 친구가 참조할 수 있습니다.
때로는 프로젝트에서 특정 정보를 암호화하기 위해 PHP를 사용해야 합니다. 즉, 암호화 알고리즘을 통해 암호화된 문자열을 생성합니다. 이 암호화된 문자열은 해독 알고리즘을 통해 해독될 수 있으며, 이를 통해 프로그램은 해독된 정보를 쉽게 처리할 수 있습니다.
가장 일반적인 애플리케이션은 사용자 로그인 및 일부 API 데이터 교환 시나리오입니다.
저자는 여러분과 공유할 몇 가지 고전적인 PHP 암호화 및 암호 해독 기능 코드를 수집했습니다. 암호화 및 복호화의 원칙은 일반적으로 특정 암호화 및 복호화 알고리즘을 사용하고 알고리즘에 키를 추가한 후 최종적으로 암호화 및 복호화 결과를 얻는 것입니다.
1. 매우 강력한 인증코드 암호화 기능, Discuz! Classic 코드(자세한 설명 포함):
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; // 参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b), //解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $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 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { // 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } }
함수 , $expiry의 $string): 문자열, 일반 텍스트 또는 암호문; $Operation: DECODE는 암호 해독을 의미하고, 기타는 암호화를 의미합니다. $key: 암호화 키; $expiry: 암호문 유효 기간.
사용법:
$str = 'abcdef'; $key = 'www.helloweba.com'; echo authcode($str,'ENCODE',$key,0); //加密 $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; echo authcode($str,'DECODE',$key,0); //解密
2. 암호화 및 암호 해독 기능 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<p class="cnblogs_code_toolbar" style="margin:5px 0px 0px;padding:0px;"><span class="cnblogs_code_copy" style="margin:0px;padding:0px 5px 0px 0px;line-height:1.5;"><img src="https://img.php.cn/upload/article/000/153/291/9e43d35958ca6748e93ca3656ec369b0-0.gif" alt="2가지 이상의 고전적인 PHP 암호화 및 복호화 기능"></span> </p><p style="max-width:90%"Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;text-align:left;background-color:rgb(245,245,245);"> 함수 암호화($string,$Operation,$key ) 중간 $string: 암호화 및 복호화해야 하는 문자열 $작업: 암호화 또는 복호화 여부 결정, E는 암호화, D는 복호화를 의미합니다. <br>사용법: </p><p class="cnblogs_code" style="margin:5px 0px;padding:5px;background-color:rgb(245,245,245);border:1px solid rgb(204,204,204);color:rgb(0,0,0);text-align:left;font-family:'Courier New';font-size:12px;"></p><pre style="margin-bottom:0px;padding-right:0px;padding-left:0px;white-space:pre-wrap;font-family:'Courier New';">$str = 'abc'; $key = 'www.helloweba.com'; $token = encrypt($str, 'E', $key); echo '加密:'.encrypt($str, 'E', $key); echo '解密:'.encrypt($str, 'D', $key);
相关推荐:
위 내용은 2가지 이상의 고전적인 PHP 암호화 및 복호화 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!