Мне нужен хэш (MD5) весь пароль в нашей базе данных Sql Server 2000. Я могу легко сгенерировать программу C#/VB.NET для преобразования (хэша) всех паролей, но мне было интересно (больше для моего образования, чем для реальной неотложной необходимости), если бы можно было вычислить хэш MD5 непосредственно в T-SQL.
Спасибо всем, кто ответит.Можно ли вычислить хэш MD5 непосредственно на языке T-SQL?
ответ
Этот код используется, но не является родным для данного языка.
Большое спасибо. Я надеялся найти способ сделать это непосредственно с операторами SQL, но это тоже хорошо! –
В 2005 году и позже, вы можете вызвать функцию HashBytes(). В 2000 году самая близкая вещь - pwdencrypt/pwdcompare, хотя эти функции имеют свои собственные подводные камни (читайте комментарии к ссылке).
Большое спасибо за ваш добрый ответ. В конце я выбираю ответ Дэниела, потому что я искал хеширование MD5, но ваш пришел очень близко, и предложение о pwdencryt/pwdcompare заставило меня узнать что-то действительно интересное. –
Нет, нет родной команды TSQL для создания MD5 хэш-й в SQL Server 2000.
В 2005 и выше, вы можете использовать HashBytes
функции: http://msdn.microsoft.com/en-us/library/ms174415.aspx
Несмотря на то, что я выбрал еще один ответ, я все равно хотел бы поблагодарить вас за ваш ответ. –
Там нет ничего магического md5, вы можете реализуйте его как чистую функцию tsql, если хотите. Я не уверен, что это было бы интересно в TSQL, но не должно быть ничего мешает вам делать это :)
Пожалуйста, смотрите ниже пример/решения с использованием 2008
DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HashBytes('md5', @HashThis);
GO
Только для записи:
UPDATE T_WHATEVER_YOUR_TABLE_NAME_IS
SET PREFIX_Hash = LOWER(SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', LOWER('a-string-with-utf8-encoded-international-text'))), 3, 32))
Связанный, для версий после SQL Server 2000: http://stackoverflow.com/q/3525997/1569 –