2013-03-30 9 views
0
insert into test(username,pwd) values('Jim',ENCODE('123456','Jim')); 
select username from test where username='Jim' and pwd=ENCODE('123456','Jim') 

insert into test(username,pwd) values('Ryan',SHA('123456')) 
select username from test where username='Ryan' and pwd=SHA('123456') 

insert into test(username,pwd) values('Jack',MD5('123456')) 
select username from test where username='Jack' and pwd=MD5('123456') 

SHAMD5을 사용하여 올바른 결과를 얻을 수없는 이유는 무엇입니까? 암호는 모두 123456이지만 다른 암호화 방법을 사용하면 올바른 결과를 얻을 수 없습니다.MySQL 암호 암호화 유효성 검사

첫 번째는 "Jim"을 올바르게 출력 할 수 있습니다. 그러나 두 번째와 세 번째는 "Ryan"또는 "Jack"을 출력 할 수 없으며 결과 집합은 null입니다. 왜? 암호화 된 비밀번호로 사용자를 확인하는 방법을 알고 싶습니다.

+0

그것은 "PWD"어떤 필드 유형 및 길이 나 – serans

+1

작동? MD5와 SHA는 암호화가 아니라 해시입니다. 차이점은 암호화를 역으로 할 수 있지만 해시는 한 가지 방법 일뿐입니다. 이것은 당신의 예제에 문제가되지 않지만 나는 그것을 지적해야한다고 생각했습니다. – Steve

+0

또한 "java"및 "web"태그는 질문과 관련이 없습니다. – serans

답변

1

뭔가 잘못하고있는 것일 수 있습니까? 나를 위해 잘 작동합니다.

SQL Fiddle link with the queries.

내 직감은 잘린 버전의 해시를 저장한다는 것입니다.

+0

이것이 실패 할 수있는 유일한 방법 인 것처럼 보입니다. – Xnoise

+0

당신은 직감이 옳습니다. 나는 길이를 생각하는 것을 잊는다. .. – Ryan

1

당신은 해시를 자르는 당신의 20 문자 VARCHAR 필드로 필드 유형을 변경해야합니다 : 32 문자열이 너무 CHAR(32)를 사용

MD5을 생산하고 있습니다.

SHA은 64 문자 문자열을 생성하므로 CHAR(64)을 사용하십시오.

성능의 이유로 입력 길이를 알고있는 경우 VARCHAR을 항상 사용해야합니다 (SQL은 할당 할 수있는 양을 알고 있음).

관련 문제