【发布时间】:2011-10-19 18:03:06
【问题描述】:
我已经成功地为我的 Joomla! 远程连接到 MySQL 数据库! 1.5 网站在 Visual Basic .NET 2010 中使用 MySqlConnector。
现在我正在尝试从以简单形式提交的值到从 MySQL 查询中检索到的值来验证用户的密码。
我在 forums.joomla.org 上找到了一个有用的帖子,标题为 "Joomla password MD5 & VB.NET MD5",但那里的代码 sn-ps 产生了不正确的哈希。
这里是另一个有用的 Joomla 论坛帖子,关于 passwords are encrypted(使用 MD5 哈希和“salt”)如何在 Joomla DB 中。
这里是修改后的代码:
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”使用正确的密码/数据库加密密码组合非常不同。有什么想法吗?
【问题讨论】:
-
嗯。我正在使用管理员的凭据测试此代码,但是在尝试了标准用户之后,它起作用了! Joomla 中的管理员有不同的加密方法吗?
-
Joomla 密码默认是加盐的,如果你手动创建一个没有加盐的用户,它仍然可以工作。您是否手动创建了其他用户?
标签: vb.net joomla passwords mysql-connector password-encryption