我需要对我们的Sql Server 2000数据库中的所有密码进行哈希(MD5)。我可以轻松地生成一个C# / VB.NET程序来转换(哈希)所有密码,但我想知道(更多是为了我的教育而不是真正必要的需求),是否可能在T-SQL中直接计算MD5哈希。
谢谢任何回答的人。
我需要对我们的Sql Server 2000数据库中的所有密码进行哈希(MD5)。我可以轻松地生成一个C# / VB.NET程序来转换(哈希)所有密码,但我想知道(更多是为了我的教育而不是真正必要的需求),是否可能在T-SQL中直接计算MD5哈希。
谢谢任何回答的人。
在2005年及以后,您可以调用HashBytes()函数。而在2000年,最接近的功能是pwdencrypt/pwdcompare,尽管这些函数有自己的缺陷(请阅读链接的评论)。
它使用了这段代码,但它并不是该语言的原生代码。
很抱歉,在SQL Server 2000中没有原生的TSQL命令可以生成MD5哈希。
在2005及以上版本中,您可以使用HashBytes
函数:http://msdn.microsoft.com/en-us/library/ms174415.aspx
DECLARE @HashThis nvarchar(4000);
SELECT @HashThis = CONVERT(nvarchar(4000),'dslfdkjLK85kldhnv$n000#knf');
SELECT HashBytes('md5', @HashThis);
GO
MD5 并没有什么神奇的地方,如果你想的话,可以将其实现为纯 T-SQL 函数。我不确定在 T-SQL 中这样做是否有趣,但是没有任何阻止你这样做的东西 :)
仅供记录:
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) )