为什么 HashBytes 和 MD5CryptoServiceProvider().ComputeHash 不匹配?
有人可以向我解释为什么 T-SQL
SELECT substring(master.dbo.fn_varbintohexstr(hashbytes('MD5', 'HelloWorld')), 3, 32)
和 .NET
Convert.ToBase64String(New System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.UTF8.GetBytes("HelloWorld")))
不返回相同的结果吗?
Tsql 返回 68e109f0f40ca72a15e05cc22786f8e6
,.net 返回 aOEJ8PQMpyoV4FzCJ4b45g==
Can someone explain to me why don't T-SQL's
SELECT substring(master.dbo.fn_varbintohexstr(hashbytes('MD5', 'HelloWorld')), 3, 32)
and .NET's
Convert.ToBase64String(New System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(System.Text.Encoding.UTF8.GetBytes("HelloWorld")))
return the same result?
Tsql returns 68e109f0f40ca72a15e05cc22786f8e6
and .net returns aOEJ8PQMpyoV4FzCJ4b45g==
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
.net 是base64,T-SQL 是十六进制。它们是不同的编码。
输出的长度也告诉您这一点,因为 MD5 提供 16 个字节(根据 T-SQL 解决方案)
The .net one is base64, the T-SQL one is hex. They are different encodings.
The length of the output tells you that too because MD5 delivers 16 bytes (as per the T-SQL solution)
因为您要求 T-SQL 返回十六进制编码的字节,而您告诉 .NET 返回 Base64 编码的字节...这是非常不同的编码并且永远不匹配...
Because you are asking T-SQL to return the bytes HEX encoded while you tell .NET to return them Base64-encoded... that are very different encoding and do never match...