2010-08-13 3 views
1

В настоящее время у меня есть схема базы данных, содержащая пароль пользователя в виде простого текста. Я добавил новый столбец с паролем типа binary (16) с целью хэширования текущего обычного текстового пароля через MD5. Когда я это делаю, я обнаружил, что значение, сохраненное в поле пароля, неверно. Вот мой запрос преобразования:HASHBYTES varchar, возвращающий неправильное значение хэша

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

Для одного из моих записей, простой текст пароля ASDF. Правильное значение MD5 - 0x912ec803b2ce49e4a541068d495ab570. Однако запись обновляется до 0xEC81AFD2DF2BDA47850F9182F4AC300D.

Неужели кто-нибудь видел такие проблемы раньше? Я использую SQL Server 2008.

Update: Думая об этом немного больше, я преобразовал простой поле текста пароль от VARCHAR (MAX) в VARCHAR (50). Он отображается аналогично в студии управления SQL, но мне интересно, каким образом базовая кодировка, когда данные были в формате varchar (MAX), каким-то образом скопирована в новый формат varchar (50), вызывая несоответствие.

+1

Почему вы считаете, что возвращаемое значение неверно? – Rob

+0

У меня есть обычная программа, которая регистрирует новых пользователей, которые используют одну и ту же функцию HASHBYTES и одно и то же двоичное (16) поле и сохраняют правильный хеш. – David

ответ

1

Так что я понял, что здесь происходит не так. После того, как я преобразовал все поля пароля обычного текста (или, возможно, это было верно все время, я не уверен), куча \ 0 была добавлена ​​в конец поля. Поэтому вместо слова «яблоко» это было «apple \ 0 \ 0 \ 0 \ 0 \ 0». Студия управления SQL не показывает эти \ 0, но отладчик Visual Studio сделал это. После удаления всех конечных \ 0, моя проблема исчезнет.

Смежные вопросы