MD5CryptoServiceProvider ComputeHash VS 2003和VS 2008之间的问题

时间:2009-07-13 01:50:29

标签: vb.net visual-studio visual-studio-2008

我有一个生成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


3 个答案:

答案 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。