Альтернатива хэш-байтам SQL Server 2005 («sha1», «код») в MySQL

Привет, у меня есть несколько паролей, зашифрованных таким образом:

hashbytes(‘sha1’,'password')

Используя SQL Server 2005, мы планируем переход на MySQL.

В MySQL или PHP есть эквивалент хеш-функции.

Потому что я использую стандартный алгоритм SHA1, и результаты отличаются от тех, которые у меня есть с использованием алгоритма SQL Server.


person danielgomezdidier    schedule 03.02.2011    source источник


Ответы (2)


Я узнал, что php использует кодировку ascii, поэтому, чтобы получить те же результаты, например, в студии управления сервером sql, используйте varchar (8000) в качестве @input.

person Rami A.    schedule 26.03.2011

MySQL имеет функцию SHA1:

mysql> SELECT SHA1('password');
+------------------------------------------+
| SHA1('password')                         |
+------------------------------------------+
| 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8 |
+------------------------------------------+

Что производит эквивалентная функция SQL Server?

person Alnitak    schedule 20.02.2011
comment
DECLARE @HashThis nvarchar(MAX); SELECT @HashThis = 'password'; SELECT HashBytes('SHA1', @HashThis); возвращает 0xE8F97FBA9104D1EA5047948E6DFB67FACD9F5B73, который отличается от 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8. - person Rami A.; 26.03.2011
comment
Чтобы это было немного легче читать, он получил другие хэши, но это было потому, что он использовал NVARCHAR вместо VARCHAR. Согласно другому сообщению, вы можете использовать sys.fn_varbintohexsubstring(0, HashBytes('SHA1', @HashThis), 1, 0) для получения точного совпадения... при условии, что @HashThis является varchar(8000) - person mbourgon; 05.09.2017