Использование HashBytes в SQL Server возвращает разные результаты из БД - PullRequest
1 голос
/ 11 апреля 2011

Я пытаюсь вычислить хэш md5 для определенного значения, но получаю странный результат.

Я запускаю его двумя разными способами:

SELECT HASHBYTES('md5',ZLA_PASSWORD),ZLA_PASSWORD, len(ZLA_PASSWORD) FROM ZLA_PASSWORD;

SELECT HASHBYTES('md5', '123456');

Я получаю два разных результата, где действителен только второй:

0xCE0BFD15059B68D67688884D7A3D3E8C  123456  6
0xE10ADC3949BA59ABBE56E057F20F883E

Это делается на SQL Server 2005.

проверка результата MD5 на 123456 была такой же, как и вторая проверка результата онлайн.

Есть идеи?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 11 апреля 2011

У вас разные типы данных

declare @str1 as varchar(10)
declare @str2 as nvarchar(10)

set @str1 = '123456'
set @str2 = '123456'

select
  hashbytes('md5', @str1) as 'varchar',
  hashbytes('md5', @str2) as 'nvarchar'

Результат

varchar                             nvarchar
0xE10ADC3949BA59ABBE56E057F20F883E  0xCE0BFD15059B68D67688884D7A3D3E8C
1 голос
/ 12 апреля 2011

Точнее, это должно решить проблему:

SELECT HASHBYTES('md5',CAST(ZLA_PASSWORD AS varchar)),ZLA_PASSWORD, len(ZLA_PASSWORD) FROM ZLA_PASSWORD;
1 голос
/ 11 апреля 2011

LEN Обрезает содержимое перед возвратом длины (обрезанной строки.)

Скорее всего, ваше поле пароля является полем CHAR и в нем есть пробелы.

Попробуйте выполнить RTRIM до того, какхеширование:

SELECT HASHBYTES('md5',RTRIM(ZLA_PASSWORD))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...