2010-08-13 2 views
1

현재 사용자의 암호가 일반 텍스트로 들어있는 데이터베이스 스키마가 있습니다. MD5를 통해 현재 일반 텍스트 암호를 해싱하려는 의도로 binary binary (16)라는 새로운 열을 추가했습니다. 이 작업을 수행 할 때 암호 필드에 저장된 값이 잘못되었음을 알게되었습니다. 내 기록 중 하나를 들어, 일반 텍스트 암호 asdf을가해시 값이 올바르지 않은 해시 값을 반환하는 varchar

UPDATE my_table SET password=HASHBYTES('MD5', plain_text_password);

입니다 : 여기 내 변환 쿼리입니다. 올바른 MD5 값은 0x912ec803b2ce49e4a541068d495ab570입니다. 그러나 해당 레코드는 0xEC81AFD2DF2BDA47850F9182F4AC300D으로 대신 업데이트됩니다.

전에 본 모든 문제가있는 사람이 있습니까? 내가 SQL 서버 2008

업데이트를 사용하고이 좀 더 대해 생각 을, 나는 VARCHAR (50)에 VARCHAR (MAX)에서 일반 텍스트 암호 필드를 변환. 그것은 SQL 관리 스튜디오 내에서 같은 방식으로 표시하지만, 데이터가 varchar (MAX) 형식으로되어있을 때의 기본 인코딩이 어떻게 든 새로운 varchar (50) 형식으로 복사되어 불일치가 발생하는지 궁금합니다.

+1

반환되는 값이 잘못되었다고 생각하는 이유는 무엇입니까? – Rob

+0

동일한 HASHBYTES 함수와 같은 이진 (16) 필드를 사용하는 새 사용자를 등록하고 올바른 해시를 저장하는 루틴이 있습니다. – David

답변

1

그래서 나는 여기에서 잘못된 것이 무엇인지 알아 냈습니다. 모든 일반 텍스트 암호 필드를 변환 한 후에 (또는 아마도 이것이 맞는지는 확실치 않습니다.) 필드 끝에는 \ 0이 추가되었습니다. 따라서 '사과'라는 단어 대신 '사과 \ 0 \ 0 \ 0 \ 0 \ 0'이었습니다. SQL Management Studio는이 \ 0을 표시하지 않지만 Visual Studio 디버거는 표시합니다. 모든 후행 \ 0을 제거한 후 내 문제는 사라집니다.

관련 문제