>  기사  >  백엔드 개발  >  2가지 이상의 고전적인 PHP 암호화 및 복호화 기능

2가지 이상의 고전적인 PHP 암호화 및 복호화 기능

不言
不言원래의
2018-04-03 10:12:251809검색


재인쇄: https://www.cnblogs.com/wicub/p/6395349.html



이 기사에서는 주로 두 가지 고전적인 PHP 암호화 및 복호화 기능의 공유를 소개합니다. 하나는 Discuz입니다. !의 인증 코드 암호화 기능(자세한 분해 포함) 중 하나는 encrypt() 기능이며 둘 다 상대적으로 고전적이므로 도움이 필요한 친구가 참조할 수 있습니다.

때로는 프로젝트에서 특정 정보를 암호화하기 위해 PHP를 사용해야 합니다. 즉, 암호화 알고리즘을 통해 암호화된 문자열을 생성합니다. 이 암호화된 문자열은 해독 알고리즘을 통해 해독될 수 있으며, 이를 통해 프로그램은 해독된 정보를 쉽게 처리할 수 있습니다.
가장 일반적인 애플리케이션은 사용자 로그인 및 일부 API 데이터 교환 시나리오입니다.

저자는 여러분과 공유할 몇 가지 고전적인 PHP 암호화 및 암호 해독 기능 코드를 수집했습니다. 암호화 및 복호화의 원칙은 일반적으로 특정 암호화 및 복호화 알고리즘을 사용하고 알고리즘에 키를 추가한 후 최종적으로 암호화 및 복호화 결과를 얻는 것입니다.
1. 매우 강력한 인증코드 암호화 기능, Discuz! Classic 코드(자세한 설명 포함):


2가지 이상의 고전적인 PHP 암호화 및 복호화 기능

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));   
    }   
}

2가지 이상의 고전적인 PHP 암호화 및 복호화 기능

함수 , $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():


2가지 이상의 고전적인 PHP 암호화 및 복호화 기능

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);

相关推荐:

分享一个刚写的PHP加密解密函数 

PHP中加密解密函数与DES加密解密实例


위 내용은 2가지 이상의 고전적인 PHP 암호화 및 복호화 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.