0

我已经成功地为我的Joomla 远程连接到 MySQL 数据库!1.5网站在Visual Basic .NET 2010中使用 MySqlConnector 。

现在我正在尝试从以简单形式提交的值到从 MySQL 查询中检索到的值来验证用户的密码。

我在 forums.joomla.org 上找到了一个有用的帖子,标题为“Joomla 密码 MD5 和 VB.NET MD5”,但那里的代码片段产生了不正确的哈希值。

这是另一个有用的 Joomla 论坛线程,关于如何在 Joomla DB中加密密码(使用 MD5 哈希和“盐”)。

这是代码的修改版本:

Imports System.Text
Imports System.Security.Cryptography

...

Private Function JoomlaUserAuth(ByVal Password As String, ByVal EncryptedPassword As String) As Boolean

    'HashedPassword:Salt = value from Joomla DB

    Dim Values() As String = Split(EncryptedPassword, ":")
    Dim HashedPassword As String = Values(0)
    Dim Salt As String = Values(1)


    Dim NewHashedPassword As String = GetHash(Password & Salt)

    Return NewHashedPassword.Equals(HashedPassword)

End Function


Private Function GetHash(ByVal StringToHash As String) As String
    Dim md5 As New MD5CryptoServiceProvider()
    Dim encoder As New UTF7Encoding()
    Dim encStringBytes As [Byte]()

    encStringBytes = encoder.GetBytes(StringToHash)
    encStringBytes = md5.ComputeHash(encStringBytes)

    Dim strHex As String = String.Empty
    For Each B As Byte In encStringBytes
        strHex &= String.Format("{0:x2}", B)
    Next

    Return strHex

End Function

结果是“NewHashedPassword”和“HashedPassword”使用正确的密码/数据库加密密码组合非常不同。有任何想法吗?

4

1 回答 1

0

要获得用户密码的正确哈希值,您应该输入两次密码,例如:

Dim NewHashedPassword As String = GetHash(Password & Password & Salt)

于 2011-10-24T13:14:18.153 回答