В настоящее время у меня есть схема базы данных, содержащая пароль пользователя в виде простого текста. Я добавил новый столбец с паролем типа 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), вызывая несоответствие.
Почему вы считаете, что возвращаемое значение неверно? – Rob
У меня есть обычная программа, которая регистрирует новых пользователей, которые используют одну и ту же функцию HASHBYTES и одно и то же двоичное (16) поле и сохраняют правильный хеш. – David