使用C#为Joomla 2.5创建密码
本文关键字:创建 密码 Joomla 使用 | 更新日期: 2023-09-27 18:24:02
我正在尝试使用C#创建Joomla 2.5的新密码。
我尝试过用MD5CryptoService
散列一些pass,然后用32个字符连接一个salt字符串的方法,但没有成功。
var provider = new MD5CryptoServiceProvider();
var bytesFromPassword = System.Text.Encoding.ASCII.GetBytes("my_password");
var hash = provider.ComputeHash(bytesFromPassword);
Random random = new Random((int) DateTime.Now.Ticks);
byte[] salt = new byte[32];
random.NextBytes(salt);
string hashTo64 = Convert.ToBase64String(hash);
string saltTo64 = Convert.ToBase64String(salt);
var formattedPassword = string.Format("{0}:{1}", hashTo64, saltTo64);
这个代码有问题吗?
我需要换点什么吗?
Joomla 2.5使用了一种不同于我尝试的新加密方法吗?
谢谢大家!
目前,您正在创建的salt不用于对密码进行salt处理。根据我对Joomla的理解,密码保存为十六进制字符串。
首先,您必须将盐包含在bytesFromPassword
中
var salt = "ThereAreManySaltsButThisOneIsMine";
var bytesFromPassword = Encoding.ASCII.GetBytes("my_password" + salt);
var hash = provider.ComputeHash(bytesFromPassword);
var hashString = GenerateHexadecimalStringFromBytes(hash);
var formattedPassword = string.Format("{0}:{1}", hashString, salt);
将字节数组转换为十六进制字符串的Helper方法:
private static string GenerateHexadecimalStringFromBytes(byte[] hash)
{
StringBuilder sBuilder = new StringBuilder();
// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
foreach (byte t in hash)
{
sBuilder.Append(t.ToString("x2"));
}
return sBuilder.ToString();
}
我用以下两个问题解决了这个问题:
使用php创建joomla用户密码?
如何将字节数组转换为字符串
希望它也能帮助到别人!