【问题标题】:Is it possible to calculate MD5 hash directly in T-SQL language?是否可以直接用 T-SQL 语言计算 MD5 哈希?
【发布时间】:2012-06-22 22:16:06
【问题描述】:

我需要散列 (MD5) 我们 Sql Server 2000 数据库中的所有密码。我可以轻松地生成一个 C#/VB.NET 程序来转换(散列)所有密码,但我想知道(更多的是为了我的教育而不是真正的迫切需要)是否可以直接在 T-SQL 中计算 MD5 散列。
感谢任何愿意回答的人。

【问题讨论】:

标签: sql-server tsql hash sql-server-2000 md5


【解决方案1】:

在 2005 年及以后,您可以调用 HashBytes() 函数。在 2000 年,最接近的是 pwdencrypt/pwdcompare,尽管这些函数有其自身的缺陷(请阅读链接的 cmets)。

【讨论】:

  • 非常感谢您的友好回复。最后我选择了丹尼尔的答案,因为我正在寻找 MD5 哈希,但你的答案非常接近,关于 pwdencryt/pwdcompare 的建议让我学到了一些非常有趣的东西。
【解决方案2】:

它正在使用此代码,但它不是该语言的原生代码。

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

【讨论】:

  • 非常感谢。我希望能找到一种方法,直接用 SQL 语句来做,不过这样也不错!
【解决方案3】:

不,SQL Server 2000 中没有用于生成 MD5 哈希的本机 TSQL 命令。

2005年及以上可以使用HashBytes函数:http://msdn.microsoft.com/en-us/library/ms174415.aspx

【讨论】:

  • 虽然我选择了其他答案,但还是非常感谢您的回复。
【解决方案4】:

请参阅下面使用 2008 的示例/解决方案

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

【讨论】:

    【解决方案5】:

    md5 没有什么神奇之处,如果你愿意,你可以将它实现为一个纯 tsql 函数。我不确定在 tsql 中会不会很有趣,但应该没有什么可以阻止你这样做:)

    【讨论】:

      【解决方案6】:

      仅作记录:

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

      【讨论】:

        猜你喜欢
        • 2010-12-01
        • 2012-04-14
        • 1970-01-01
        • 2011-12-08
        相关资源
        最近更新 更多