>  기사  >  백엔드 개발  >  매니아들이 꼭 읽어야 할 Discuz 클래식 함수 주석 인증코드

매니아들이 꼭 읽어야 할 Discuz 클래식 함수 주석 인증코드

WBOY
WBOY원래의
2016-07-25 09:13:461528검색
Discuz 기능 중 가장 고전적인 기능은 인증코드 기능입니다. supersite, UCenterHome, UCenter, Discuz X 모두 이 기능을 사용하여 전송 문자열과 쿠키를 암호화하기 때문입니다

오늘은 authcode에 대한 자세한 설명을 가져오겠습니다. 잘 작성되지 않았다면 엄지손가락을 치켜세워주세요. 당신이 그것을 좋아한다면, 당신은 그것으로부터 배울 수 있습니다!
  • /*
  • *
  • * 기능: 고정키를 통해 문자열을 암호화하고 복호화합니다.
  • * 매개변수 분석: $string은 암호화된 문자열, $Operation은 작업 유형('ENCODE'는 암호화, 'DECODE'는 복호화 작업), $key는 암호화에 사용되는 키, $expiry는 만료 시간
  • * 사용 예: authcode('123 ', 'ENCODE', 'jordan', 0); '123' 문자열을 암호화하려면 'jordan' 문자열을 사용하세요.
  • *
  • * */
  • function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
  •               //keyc의 길이, 코드북 복호화 시 키와 함께 사용해야 함
  • $ckey_length = 4;
  • //키의 Md5 값, 32비트 고정 값
  • $key = md5($key ? $key : $GLOBALS[ 'Discuz_auth_key'];
  • // Keya 위 MD5의 MD5(키 앞의 16비트)
  • $ Keya = MD5(Substr ($ key, 0, 16));                      사용 사용 사용 사용                     ' ' ' ' 스루 스루 아웃 아웃 아웃 오프를 통해                     ‐                                                                                                                         > //keyc의 길이를 가져옵니다.
  • //암호 문자열에서 keyc를 가로챕니다. 참고: keyc는 변경되지 않고 전달됩니다.
  • // 암호화입니다. md5(마이크로초 문자열)를 가져오고 해당 키c의 길이를 다운로드합니다. 참고: keyc는 무작위입니다.
  • $keyc = $ckey_length ? ($eration == 'DECODE' ? substr($string, 0, $ ckey_length): substr(md5(microtime()), - $ckey_length)): '';
  • //keya를 사용하여 md5를 keya 및 keyc와 연결합니다. 암호화 또는 암호 해독에 사용됩니다. 참고: 암호화 중 무작위, 복호화 중 수정됨
  • $cryptkey = $ keya.md5($keya.$keyc);
  •                   // $cryptkey 길이는 16 32=48                                                                                             암호화 및 복호화를 위해 처리 문자열을 얻습니다
  • / /복호화라면 암호화시 앞쪽에 스플라이싱되기 때문에 keyc 길이만큼 문자열을 가로채서 base64로 디코딩
  • //암호화라면 타임스탬프를 변경하고 만료초를 연결 , 10자리 문자열로 형식을 지정하고 확인 문자열의 16자리를 연결한 다음 원래 문자열을 연결합니다.
  • $string = $eration == 'DECODE' ? base64_decode(substr($string, $ckey_length )) : sprintf(' 0d', $expiry ? $expiry time() : 0).substr(md5($string.$keyb), 0, 16).$string;
  • //처리 문자열 길이 가져오기
  •         $string_length = strlen($string);                                                                                                                                       2, 3, ...생략됨... , 255);
  • $box = range(0, 255);
  • //셔플 새 키 문자열, 암호 해독 중에 동일한 문자열이 생성됩니다. String
  •               $rndkey = array(); $key_length]);
  • }
  •                                                  이 $rndkey[$i]) % 256;
  • $tmp = $box[$i];
  • $box[$i] = $box[$j] ;
  •                                                                                 
  •                       // 비밀이 무작위인지 확인하기 위해 생성된 코드북을 다시 섞습니다.                                                 = ($a 1) % 256;
  • $j = ($j $box[$a]) % 256;
  • $tmp = $box[$a];
  • $box[$a] = $box[$j];
  •                                                                                                                                 $string[$i]) ^ ($box[($box[$a ] $box[$j]) % 256]));
  •          }
  •                                                     ') {
  •                                                                                                > ($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
  •                                              ~ ~            // 그렇지 않으면 빈 문자열 반환
  •                                                                                                                     
  • } else {
  • // keyc와 base64를 스티칭하여 암호화된 경우(장애)
  • // 암호화 완료
  • Return $ Keyc.str_replace ('=', '', Base64_encode ($ Result ));
  • }
  • 쿠키


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