2014-12-28 7 views
-1

사용자의 로그인을 확인하고 문자열에 md5()를 적용하기 위해 일반 암호를 전달하면 md5 해시가 MySQL 데이터베이스에 저장된 md5 해시와 동일합니다 (로그인 성공) .동일한 암호이지만 다른 md5 해시

하지만 내 POST 기능에서 사용자 암호를 명확하게 전달하고 싶지 않으므로 cryptoJS를 사용하여 키를 보낸 다음 PHP 서버 측 암호 만 해독하기로 결정했습니다.

암호가 해독 된 암호를 사용할 때 문제가 발생합니다. md5는 다릅니다. 이것은 명확한 암호 문자열이 암호 해독 된 암호와 동일하고 md5 해시가 다르기 때문에 이상합니다.

var_dump($clearPassword); //Hello. 
var_dump($decryptedPassword); //Hello. 

:하지만 이렇게함으로써

당신이 볼 수 있듯이

var_dump(md5($clearPassword)); //3ea484671d7b00a1df4734ded1aa379c1. 
var_dump(md5($decryptedPassword)); //470a1ad08cbdebe075214591ea20fec9. 

, 그것은 정확히 같은 문자열입니다하지만 MD5 해시는 다른, 난으로 제공) (즉 위해서 var_dump를 발견했습니다 출력 :

문자열 인코딩을 변경하려고했지만 운이 없습니다. 누구나 왜 md5()가 같은 암호 문자열을 사용하여 작동하는지 설명 할 수 있습니까? 다시 한 번 감사드립니다.

+0

여기서 '$'기호가 누락되지 않았습니까? var_dump (md5 (decryptedPassword)) ' – fpierrat

+0

"PHP 서버 측에서 키를 보내 암호를 해독하십시오."라는 말의 의미가 명확하지 않습니다. 무슨 열쇠 요? 어떤 암호화를 사용하고 있습니까? (MD5는 암호화가 아닙니다 ...) –

+0

@fpierrat 죄송합니다. 오타가 잘못되었습니다. 게시물에서 수정 했으므로 $와 아무 관계가 없습니다. –

답변

0

@fpierrat는 클라이언트 측에서 암호화하고 PHP 서버에서 md5 해시를 직접 비교할 것입니다.

+1

내가 연결 한 다른 대답에 설명 된 것처럼 무작위 소금을 추가하는 것에주의하십시오. 그렇지 않으면 데이터베이스 (암호의 md5)에 저장된 정확한 문자열을 클라이언트에서 서버로 간단히 보내야한다는 것을 의미합니다. 그러면 암호를 일반 텍스트로 보내는 것만큼이나 안전합니다 .-) 같은 링크를 다시 열어 궁극적으로 독자에게 시간을 절약하십시오. http://stackoverflow.com/a/27555577/3872061 – fpierrat

3

암호가 해독 된 암호는 원본 암호와 다릅니다. 두 문자열의 길이를 확인하고 인코딩을 확인하고 바이트 간 비교를 수행하십시오. "Hello \ 0"과 "Hello \ 0"은 동일하게 보이지만 그렇지 않습니다. "Hello \ 0"과 "Hello \ 0 \ 0 \ 0"조차 동일하지 않습니다. 어쩌면 암호 해독 알고리즘은 32 바이트의 문자열 길이를 제공합니다.

+0

이것은 매우 흥미 롭습니다. 사실 바이트 당 비교 바이트를했고 완전히 다른 것입니다! 이제 어떻게하면 두 개의 문자열 (암호를 지우고 암호를 해독 한 암호)을 동일하게 보이게하고 동일한 인코딩 구조를 만들 수 있는지 알고 싶습니다. –

+0

어쩌면 하나의 문자열은 일반 ASCII 문자열 (C 문자열)이고 다른 하나는 utf16이거나 다른 인코딩 스키마가있을 수 있습니다. PHP는 문자열 인코딩과 관련하여 매우 지루합니다. –

+0

당신은 다시 옳습니다! 삭제 된 암호는 ASCII로되어 있고 암호 해독 된 암호는 UTF-8입니다. 나는 같은 인코딩을 얻으려면 무엇을 해야할지 알고 싶습니다. –