2016-06-25 1 views
4

PHP로 변환하려고하는 javascript 함수가 있습니다. CryptoJS 라이브러리를 사용합니다 (구체적으로 components/enc-base64-min.jsrollups/md5.js). 그들은 here을 찾을 수 있습니다. 그것에PHP를 사용하여 CryptoJS.enc.Base64와 동일한 결과를 생성합니다.

코드의 비트

// Let's say str = 'hello'; 

var md5 = CryptoJS.MD5(str); 
md5 = md5.toString(CryptoJS.enc.Base64); 
// md5 outputs "XUFAKrxLKna5cZ2REBfFkg==" 

내가 base64로 인코딩 된 MD5를 사용하여 해싱된다 str 변수 추정, 그래서

$md5 = md5($str); 
$md5 = base64_encode($md5); 
// md5 outputs "MmZjMGE0MzNiMjg4MDNlNWI5NzkwNzgyZTRkNzdmMjI=" 

그럼 I 모두 검증 시도 간단한 코드를 시도 출력은 JS 출력이 유효한 Base64 문자열조차도 같지 않습니다.

내가 W3Schools에서 toString() 매개 변수를 찾기 위해 노력 더 이해하기 위해,하지만 매개 변수는 정수 (2, 8, 16)로 가정되는 기준에 따라가, 나에게 의미가 나던, 왜 CryptoJS.enc.Base64 사용입니다 대신에?

내 목표는 JS를 사용하여 유효한 base64 인코딩 된 문자열을 생성하는 것이 아니라 PHP를 사용하여 동일한 출력을 생성하는 것입니다.

+0

는 MD5는 16 바이트의 바이너리를 생산 Base64로로 인코딩 할 산출. Base 64는 각 6 비트를 8 비트 ASCII 문자로 인코딩합니다. 16 * 8/6 = 21.3 바이트이고 Base64는 출력을 4 바이트 배수로 채 웁니다. 이 MD5 출력 base64 인코딩은 첫 번째 예제와 일치하는 24 바이트 출력을 생성합니다. 두 번째 예제는 44 바이트의 출력을 생성하므로 올바르지 않습니다. – zaph

+0

@zaph 정교한 정화를 주셔서 감사합니다 –

답변

4

단일 매개 변수가있는은의 16 진수 문자열 으로 md5 해시를 반환합니다.

대신 당신은 당신이 (true으로 설정) md5() 너무 선택적 매개 변수 $raw_output를 통과해야하므로 원시 바이트

$md5 = md5($str, true); 

http://php.net/manual/it/function.md5.php

+0

정말 고맙습니다. 정말 고맙습니다! –

관련 문제