이 기사에서는 주로 두 가지 고전적인 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 ? ($작업 == '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(' 0d', $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;
-
- // 키북에서 키를 가져와서 XOR을 수행한 후 문자로 변환합니다.
-
- $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)) {
-
- return substr($result, 26)
-
- } else {
-
- return '';
-
- }
-
- } else {
-
- //동적 키를 암호문에 저장하기 때문에 동일한 평문이 다른 암호문을 생성할 수 있습니다.
-
- // 암호화된 암호문은 복사 과정에서 손실될 수 있는 특수 문자일 수 있으므로 base64 인코딩을 사용하세요.
-
- return $keyc.str_replace('=', '', base64_encode ($result))
-
- }
-
- }
-
-
- 코드 복사
-
-
authcode($string, $operation, $key, $expiry) 함수의 $string: 문자열, 일반 텍스트 또는 암호문: DECODE는 암호 해독을 의미하고, 기타는 암호화를 의미합니다. 암호문의 기간. 사용법:
- $str = 'abcdef';
- $key = 'www.helloweba.com'
- echo authcode($str,'ENCODE' ,$key,0); //암호화
- $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk';
- echo authcode($str,'DECODE',$key,0); //암호화
코드 복사
2. 암호화 및 복호화 함수 encrypt():
- 함수 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= 배열();
-
- $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])%6
-
- $tmp= $ 상자[$i]
-
- $box[$i]=$box[$j]
-
- $box[$j]=$tmp;
-
- for($a=$j=$i=0;$i<$string_length;$i ){
-
- $a=($a 1)%6; 🎜 > $j=($j $box[$a])%6
-
- $tmp=$box[$a]
-
- $box[$a]=$box[ $ j];
-
- $box[$j]=$tmp;
-
- $result.=chr(ord($string[$i])^($box[($box[ $ a] $box[$j])%6]));
-
- }
-
- if($Operation=='D'){
-
- if(substr( $ result,0,8)==substr(md5(substr($result,8).$key),0,8)){
-
- return substr($result,8)
-
- }else{
-
- return'';
-
- }
-
- }else{
-
- return str_replace('=','',base64_encode($ 결과 ));
-
- }
-
- }
- ?>
-
-
- 코드 복사
-
함수 encrypt($string,$Operation,$key)에서 $string: 암호화 및 암호 해독이 필요한 문자열, $Operation: 암호화 또는 암호 해독 여부를 결정합니다. E는 암호화를 의미하고 D는 암호 해독을 의미합니다. : 열쇠.
사용법:
$str = 'abc'; $key = 'www.helloweba.com' $token = encrypt($str, ' E', $key); echo '암호화:'.encrypt($str, 'E', $key) - echo 'Decryption:'.encrypt($str, 'D', $key) ;
-
-
- 코드 복사
-
암호화 및 복호화, PHP
|