MD5哈希值以' 0x'为前缀

时间:2016-09-12 07:30:02

标签: c# sql-server-2008

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

我正在尝试在我正在编写的内容中包含一些逻辑,这些逻辑也可以解决md5文件。

问题是两个系统正在为同一个文件产生微妙不同的哈希值。系统将返回:

0x098F6BCD4621D373CADE4E832627B4F6

我的函数(以及一些在线函数)将为同一个文件返回

098F6BCD4621D373CADE4E832627B4F6

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

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

2 个答案:

答案 0 :(得分:1)

0x前缀的原因是数据库(正确地)返回十六进制值。在您的代码中,如果将值转换为十六进制,则两个值将匹配,因为0x实际上不是值的一部分,它只是一个类型标识符

答案 1 :(得分:0)

您可以使用SQL函数

HASHBYTES('MD5', 'yourString') => 0x349DA9BFF6660DAD199ACF68D353DBA3

或者您可以使用

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