C# MD5哈希值的前缀为';0x';

C# MD5哈希值的前缀为';0x';,c#,sql-server-2008,C#,Sql Server 2008,我可以访问一个数据库(SQL 2008 R2),该数据库允许上传文件。在一个表中,它有一个名为“hash_key”的列,我认为这是md5校验和 我试图在我正在写的东西中包含一些逻辑,这也将解决md5文件 问题是这两个系统为同一个文件生成的哈希值略有不同。系统将返回以下信息: 0x098F6BCD4621D373CADE4E832627B4F6 我的函数(还有一些在线函数)会为同一个文件返回这个值 098F6BCD4621D373CADE4E832627B4F6 正如您所看到的,唯一不同的是前

我可以访问一个数据库(SQL 2008 R2),该数据库允许上传文件。在一个表中,它有一个名为“hash_key”的列,我认为这是md5校验和

我试图在我正在写的东西中包含一些逻辑,这也将解决md5文件

问题是这两个系统为同一个文件生成的哈希值略有不同。系统将返回以下信息:

0x098F6BCD4621D373CADE4E832627B4F6
我的函数(还有一些在线函数)会为同一个文件返回这个值

098F6BCD4621D373CADE4E832627B4F6
正如您所看到的,唯一不同的是前两个(0x)字符。这是否取决于数据库存储值的方式?数据库字段为二进制(16)


在进行比较时,可以忽略前两个字符吗?

使用
0x
前缀的原因是数据库(正确地)返回了十六进制值。在代码中,如果将值强制转换为十六进制,这两个值将匹配,因为
0x
实际上不是值的一部分,它只是一个类型标识符您可以使用SQL函数HASHBYTES()和两个参数:

HASHBYTES('MD5', 'yourString') => 0x349DA9BFF6660DAD199ACF68D353DBA3
CONVERT(varchar(32),HASHBYTES('MD5', 'yourString'),2) => 349DA9BFF6660DAD199ACF68D353DBA3
或者可以将CONVERT()与3个参数一起使用:

HASHBYTES('MD5', 'yourString') => 0x349DA9BFF6660DAD199ACF68D353DBA3
CONVERT(varchar(32),HASHBYTES('MD5', 'yourString'),2) => 349DA9BFF6660DAD199ACF68D353DBA3

0x
表示二进制序列,您需要一个
字节[]
。谢谢,转换为十六进制会产生以下结果:30393846364243443436323144333733414445344538333236323742344636