SQL Server HashBytes 函数
Posted
技术标签:
【中文标题】SQL Server HashBytes 函数【英文标题】:SQL Server HashBytes Function 【发布时间】:2015-12-22 16:20:45 【问题描述】:有人可以告诉我为什么我得到以下不同的答案:
这是一个非常简单的函数,用于返回哈希值:
CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARCHAR(254)
AS
BEGIN
SET @strText = HashBytes('MD5', @strText);
RETURN @strText;
END
这是我的 SQL,它返回 2 个不同的值:
SELECT HashBytes('MD5', '7690') as Hash1
, dbo.fn_GetPin('7690') AS Hash2
结果:
Hash1 Hash2
0xC6776F93BC9AFE2E511A1DBD5478362C Æwo“¼šþ.Q½Tx6,
由于某种原因,该函数没有返回与 HASH1 相同的值。 我只是不确定为什么。
谢谢。
更新:
接受的答案如下,我只是将 (max) 添加到 VARBINARY 以返回整个值。谢谢大家。
CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARBINARY(max)
AS
BEGIN
Return HashBytes('MD5', @strText);
END
【问题讨论】:
我认为这是因为函数 HashBytes 返回 varbinary 并且您的(可能是交互式的?)结果有点十六进制。您的函数强制返回 varchar,因此它向您显示解释为字符串的二进制 blob。 小事,但 MD5 不再是推荐的哈希算法,因为您看起来正在做的事情(理想情况下哈希也会加盐)。如果您在 mssqltips.com/sqlservertip/2988/… 了解更多信息。 谢谢@eftpotrm 我使用 MD5 只是为了测试目的。原来我们使用的是 SHA1。 【参考方案1】:CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARBINARY
AS
BEGIN
Return HashBytes('MD5', @strText);
END
函数应该返回一个varbinary
值。
【讨论】:
【参考方案2】:pvg 几乎把它钉在了上面。
CREATE Function [fn_GetPin](@strText VARCHAR(254))
RETURNS VARBINARY
AS
BEGIN
SET @strText = HashBytes('MD5', @strText);
RETURN CAST(@strText as VARBINARY);
END
【讨论】:
以上是关于SQL Server HashBytes 函数的主要内容,如果未能解决你的问题,请参考以下文章