Проверка подлинности паролем Joomla в Visual Basic .NET - PullRequest
0 голосов
/ 19 октября 2011

Мне удалось успешно подключиться к базе данных MySQL удаленно для моего Joomla! 1,5 веб-сайт, использующий MySqlConnector в Visual Basic .NET 2010 .

Теперь я пытаюсь аутентифицировать пароль пользователя из значений, представленных в простой форме, и значений, полученных из запроса MySQL.

Я нашел полезную ветку на forums.joomla.org под названием "Пароль Joomla MD5 & VB.NET MD5" , но фрагменты кода там дают неправильный хеш.

Вот еще одна полезная ветка форумов Joomla о том, как пароли шифруются (с использованием хеша MD5 и «соли») в БД Joomla.

Вот модифицированная версия кода:

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» сильно различаются при использовании правильной комбинации пароль / зашифрованный пароль БД. Есть идеи?

1 Ответ

0 голосов
/ 24 октября 2011

Чтобы получить правильный хеш для пароля пользователя, вы должны ввести пароль дважды, например:

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

...