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

本文关键字:哈希 密码 何使用 sql server | 更新日期: 2023-09-27 18:24:26

加密算法是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中生成相同的哈希值?

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

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

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

输出:

0x21232F297A57A5A743894A0E4A801FC3

您是否对照字符集表检查了结果;

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