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