2009-05-26 4 views
8

Мне нужен хэш (MD5) весь пароль в нашей базе данных Sql Server 2000. Я могу легко сгенерировать программу C#/VB.NET для преобразования (хэша) всех паролей, но мне было интересно (больше для моего образования, чем для реальной неотложной необходимости), если бы можно было вычислить хэш MD5 непосредственно в T-SQL.
Спасибо всем, кто ответит.Можно ли вычислить хэш MD5 непосредственно на языке T-SQL?

+0

Связанный, для версий после SQL Server 2000: http://stackoverflow.com/q/3525997/1569 –

ответ

4

Этот код используется, но не является родным для данного языка.

http://www.codeproject.com/KB/database/xp_md5.aspx

+0

Большое спасибо. Я надеялся найти способ сделать это непосредственно с операторами SQL, но это тоже хорошо! –

7

В 2005 году и позже, вы можете вызвать функцию HashBytes(). В 2000 году самая близкая вещь - pwdencrypt/pwdcompare, хотя эти функции имеют свои собственные подводные камни (читайте комментарии к ссылке).

+0

Большое спасибо за ваш добрый ответ. В конце я выбираю ответ Дэниела, потому что я искал хеширование MD5, но ваш пришел очень близко, и предложение о pwdencryt/pwdcompare заставило меня узнать что-то действительно интересное. –

2

Нет, нет родной команды TSQL для создания MD5 хэш-й в SQL Server 2000.

В 2005 и выше, вы можете использовать HashBytes функции: http://msdn.microsoft.com/en-us/library/ms174415.aspx

+0

Несмотря на то, что я выбрал еще один ответ, я все равно хотел бы поблагодарить вас за ваш ответ. –

0

Там нет ничего магического md5, вы можете реализуйте его как чистую функцию tsql, если хотите. Я не уверен, что это было бы интересно в TSQL, но не должно быть ничего мешает вам делать это :)

1

Пожалуйста, смотрите ниже пример/решения с использованием 2008

DECLARE @HashThis nvarchar(4000); 
SELECT @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf'); 
SELECT HashBytes('md5', @HashThis); 
GO 
-1

Только для записи:

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))