我有一个生成MD5哈希的数据库应用程序,并将哈希值与我们的数据库中的值(SQL 2K)进行比较。原始应用程序是用Visual Studio 2003编写的,已部署的版本已经使用了多年。
最近,.NET framework 3.5上的一些新机器与我们的运行时存在无关的问题。这迫使我们将代码路径从Visual Studio 2003移植到Visual Studio 2008.
从那时起,代码生成的哈希值与数据库中的值不同。
对代码中发布的函数的原始调用是:
RemoveInvalidPasswordCharactersFromHashedPassword(Text_Scrub(GenerateMD5Hash(strPSW)))
我正在寻找专家指导,以确定自VS 2K3以来MD5方法是否已发生变化(导致此故障点),或者可能源自其他可能的问题。
我意识到这可能不是最好的哈希方法,但是对MD5代码的任何更改都会迫使我们在数据库表中更改大约300个值,这会花费我们很多时间。此外,我试图避免重新部署此应用程序的所有功能版本。
我非常乐意发布其他代码,包括RemoveInvalidPasswordCharactersFromHashedPassword函数,或者我们的Text_Scrub,如果有必要收到适当的反馈。
提前感谢您的意见。
Public Function GenerateMD5Hash(ByVal strInput As String) As String
Dim md5Provider As MD5
' generate bytes for the input string
Dim inputData() As Byte = ASCIIEncoding.ASCII.GetBytes(strInput)
' compute MD5 hash
md5Provider = New MD5CryptoServiceProvider
Dim hashResult() As Byte = md5Provider.ComputeHash(inputData)
Return ASCIIEncoding.ASCII.GetString(hashResult)
End Function
Dim md5Provider As MD5
' generate bytes for the input string
Dim inputData() As Byte = ASCIIEncoding.ASCII.GetBytes(strInput)
' compute MD5 hash
md5Provider = New MD5CryptoServiceProvider
Dim hashResult() As Byte = md5Provider.ComputeHash(inputData)
Return ASCIIEncoding.ASCII.GetString(hashResult)
End Function
答案 0 :(得分:0)
您基本上是在询问.Net 1.1中的MD5实现是否已被破坏。
我不这么认为。我认为问题出在其他地方。
答案 1 :(得分:0)
我认为.Net MD5哈希码在VisualStudio 2008中没有改变。
但我认为:
Return ASCIIEncoding.ASCII.GetString(hashResult)
您正在将二进制数据转换为ASCII,并且丢失字符,可能问题出在新的数据库驱动程序中。您可能需要更改存储的值并开始使用blob字段或转换为base64并使用文本字段。
答案 2 :(得分:0)
试图比我的评论更有效率......
您可以尝试使用独立的md5哈希算法来验证编码,有一些web based ones或使用openssl。