2가지 클래식 PHP 암호화 및 복호화 기능 공유

WBOY
풀어 주다: 2016-07-25 08:43:00
원래의
792명이 탐색했습니다.

이 기사에서는 주로 두 가지 고전적인 PHP 암호화 및 복호화 기능을 소개합니다. 하나는 Discuz!의 인증 코드 암호화 기능(세부 분해 포함)이고 다른 하나는 encrypt() 기능이며 둘 다 비교적 고전적인 기능입니다. 다음을 참고하시면 됩니다

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

저자는 여러분과 공유하기 위해 몇 가지 고전적인 PHP 암호화 및 암호 해독 기능 코드를 수집했습니다. 암호화 및 복호화의 원칙은 일반적으로 특정 암호화 및 복호화 알고리즘을 사용하고 알고리즘에 키를 추가한 후 최종적으로 암호화 및 복호화 결과를 얻는 것입니다.
1. 매우 강력한 인증코드 암호화 기능, Discuz! Classic 코드(자세한 설명 포함):
  1. function authcode($string, $Operation = 'DECODE', $ key = '', $expiry = 0) {
  2. // 동적 키 길이, 동일한 일반 텍스트는 동적 키에 따라 다른 암호문을 생성합니다
  3. $ckey_length = 4;
  4. // 키
  5. $key = md5($key ? $key : $GLOBALS['discuz_auth_key'])
  6. // 키 a는 암호화 및 복호화에 참여합니다
  7. $keya = md5(substr($key, 0, 16))
  8. // 키 b는 데이터 무결성 확인에 사용됩니다. 🎜>
  9. $keyb = md5(substr($key, 16, 16));
  10. // 키 c는 생성된 암호문을 변경하는 데 사용됩니다.
  11. $keyc = $ckey_length ? ($작업 == 'DECODE' ? substr($string, 0, $ckey_length):
  12. substr(md5(microtime()), -$ckey_length)) : ''; // 작업에 관련된 키
  13. $cryptkey = $keya.md5($keya.$keyc)
  14. $key_length = strlen($cryptkey)
  15. / / 일반 텍스트, 처음 10비트는 타임스탬프를 저장하는 데 사용되며, 복호화 중 데이터 유효성을 확인하고, 10~26비트는 $keyb(키 b)를 저장하는 데 사용됩니다.
  16. // 복호화 시 통과됩니다. 키는 데이터 무결성을 확인합니다
  17. // 디코딩하는 경우 $ckey_length 비트부터 시작합니다. 왜냐하면 올바른 암호 해독을 보장하기 위해 동적 키가 암호문 앞의 $ckey_length 비트에 저장되기 때문입니다.
  18. $string = $Operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) :
  19. sprintf(' 0d', $expiry ? $expiry time() : 0).substr( md5($ string.$keyb), 0, 16).$string;
  20. $string_length = strlen($string)
  21. $result = ''
  22. $box = range(0, 255);
  23. $rndkey = array();
  24. // 키북 생성
  25. for($i = 0; $i <= 255 ; $i ) {
  26. $rndkey[$i] = ord($cryptkey[$i % $key_length])
  27. }
  28. // 고정된 알고리즘 사용 핵심 책을 뒤섞고 무작위성을 높이는 것은 매우 복잡해 보이지만 실제로는 암호문의 강도를 높이지 않습니다.
  29. for($j = $i = 0; $i < 256; $i ) {
  30. $j = ($j $box[$i] $rndkey[$i]) % 256
  31. $tmp = $box[$i]
  32. $box[$i] = $box[$j]
  33. $box[$j] = $tmp
  34. }
  35. / / 핵심 암호화 및 복호화 부분
  36. for($a = $j = $i = 0; $i < $string_length; $i ) {
  37. $a = ($a 1) % 256;
  38. $j = ($j $box[$a]) % 256
  39. $tmp = $box[$a]
  40. $box[$ a] = $box [$j]
  41. $box[$j] = $tmp;
  42. // 키북에서 키를 가져와서 XOR을 수행한 후 문자로 변환합니다.
  43. $result .= chr(ord($string[$i]) ^ ($box[($box[$a] $box[$j]) % 256]))
  44. }
  45. if($Operation == 'DECODE') {
  46. // 데이터 유효성을 확인하려면 암호화되지 않은 일반 텍스트 형식을 참조하세요.
  47. if((substr ($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) &&
  48. substr($result, 10, 16) == substr( md5(substr( $result, 26).$keyb), 0, 16)) {
  49. return substr($result, 26)
  50. } else {
  51. return '';
  52. }
  53. } else {
  54. //동적 키를 암호문에 저장하기 때문에 동일한 평문이 다른 암호문을 생성할 수 있습니다.
  55. // 암호화된 암호문은 복사 과정에서 손실될 수 있는 특수 문자일 수 있으므로 base64 인코딩을 사용하세요.
  56. return $keyc.str_replace('=', '', base64_encode ($result))
  57. }
  58. }
  59. 코드 복사

  60. authcode($string, $operation, $key, $expiry) 함수의 $string: 문자열, 일반 텍스트 또는 암호문: DECODE는 암호 해독을 의미하고, 기타는 암호화를 의미합니다. 암호문의 기간.

    사용법:
    1. $str = 'abcdef';
    2. $key = 'www.helloweba.com'
    3. echo authcode($str,'ENCODE' ,$key,0); //암호화
    4. $str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk';
    5. echo authcode($str,'DECODE',$key,0); //암호화
    코드 복사

    2. 암호화 및 복호화 함수 encrypt():
    1. 함수 encrypt($string,$Operation,$key='') {
    2. $key=md5($key);
    3. $key_length=strlen($key)
    4. $string=$Operation=='D'?base64_decode( $ string):substr(md5($string.$key),0,8).$string;
    5. $string_length=strlen($string)
    6. $rndkey=$box= 배열();
    7. $result='';
    8. for($i=0;$i<=255;$i ){
    9. $rndkey[$i ] =ord($key[$i%$key_length]);
    10. $box[$i]=$i
    11. }
    12. for($j=$ i =0;$i<256;$i ){
    13. $j=($j $box[$i] $rndkey[$i])%6
    14. $tmp= $ 상자[$i]
    15. $box[$i]=$box[$j]
    16. $box[$j]=$tmp;
    17. for($a=$j=$i=0;$i<$string_length;$i ){
    18. $a=($a 1)%6; 🎜 > $j=($j $box[$a])%6
    19. $tmp=$box[$a]
    20. $box[$a]=$box[ $ j];
    21. $box[$j]=$tmp;
    22. $result.=chr(ord($string[$i])^($box[($box[ $ a] $box[$j])%6]));
    23. }
    24. if($Operation=='D'){
    25. if(substr( $ result,0,8)==substr(md5(substr($result,8).$key),0,8)){
    26. return substr($result,8)
    27. }else{
    28. return'';
    29. }
    30. }else{
    31. return str_replace('=','',base64_encode($ 결과 ));
    32. }
    33. }
    34. ?>
    35. 코드 복사
    함수 encrypt($string,$Operation,$key)에서 $string: 암호화 및 암호 해독이 필요한 문자열, $Operation: 암호화 또는 암호 해독 여부를 결정합니다. E는 암호화를 의미하고 D는 암호 해독을 의미합니다. : 열쇠. 사용법:


    $str = 'abc';
    $key = 'www.helloweba.com'
    $token = encrypt($str, ' E', $key);
      echo '암호화:'.encrypt($str, 'E', $key)
    1. echo 'Decryption:'.encrypt($str, 'D', $key) ;
    2. 코드 복사

    암호화 및 복호화, PHP
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿