如何使用sql server生成类似的哈希密码?

时间:2013-07-23 19:17:02

标签: c# sql sql-server-2008 tsql md5

加密算法是md5。

在C#中,我使用以下代码生成密码: -

private MD5 _md5;
var plain = ASCIIEncoding.Default.GetBytes('admin');
var hashed = _md5.ComputeHash(plain);
var shashed = ASCIIEncoding.Default.GetString(hashed);
Console.Write(shashed);

结果是:!#/)zW¥§C‰JJ€Ã

当我使用SQL服务器代码生成密码时: -

DECLARE @HashThis varchar(100);
SELECT @HashThis = CONVERT(varchar(100),'admin');
SELECT HASHBYTES('MD5', @HashThis);
GO

结果是:0x21232F297A57A5A743894A0E4A801FC3

我使用相同的算法。如何在SQL Server中生成相同的哈希值?

2 个答案:

答案 0 :(得分:1)

您的C#代码和SQL代码都计算相同的哈希值,但SQL将结果格式化为十六进制字符串,而您的C#代码试图将哈希值的字节直接转换为ASCII字符(它们是不)。要在C#中获得相同的结果,您可以使用BitConverter类:

var shashed = "0x" + System.BitConverter.ToString(hashed).Replace("-", "");

输出:

0x21232F297A57A5A743894A0E4A801FC3

答案 1 :(得分:0)

您是否根据字符集表检查了结果;

在大多数字符集中,0x21是!,0x23是#,等等。