MD5哈希值以'0x'为前缀
本文关键字:前缀 0x 哈希值 MD5 | 更新日期: 2023-09-27 18:06:33
我可以访问一个允许文件上传的数据库(SQL 2008 R2)。在一个表中,它有一个列叫做' hash_key ',我认为这是md5校验和。
我正试图在我写的东西中包含一些逻辑,这也会计算出md5文件。
问题是这两个系统对同一个文件产生的哈希值有细微的不同。系统将返回如下内容:
0x098F6BCD4621D373CADE4E832627B4F6
对于相同的文件
,我的函数(还有一些在线函数)会返回这个098F6BCD4621D373CADE4E832627B4F6
正如您所看到的,唯一不同的是前两个(0x)字符。这取决于数据库存储值的方式吗?数据库字段为二进制(16)
在进行比较时,我可以忽略前两个字符吗?
你可以使用SQL函数HASHBYTES()有两个参数:
HASHBYTES('MD5', 'yourString') => 0x349DA9BFF6660DAD199ACF68D353DBA3
或者您可以使用CONVERT()带3个参数:
CONVERT(varchar(32),HASHBYTES('MD5', 'yourString'),2) => 349DA9BFF6660DAD199ACF68D353DBA3
使用0x
前缀的原因是数据库(正确地)返回一个十六进制值。在代码中,如果将值转换为十六进制,这两个值将匹配,因为0x
实际上不是值的一部分,它只是一个类型标识符
参考解决方案,我想从二进制值中获取十六进制值,从中删除0x
CONVERT(VARCHAR(100),HashedVal2,2)
在存储值之前进行varchar转换
SELECT * , CONVERT(VARCHAR(100),HashedVal2,2)
FROM
(
SELECT * , HASHBYTES('SHA2_256',MyVal) AS HashedVal2
FROM OLEDB_MyTable
)T