我正在尝试使用C#为Joomla2.5创建新的密码。
我尝试了一种方法,使用MD5CryptoService散列一些传递,然后连接一个包含32个字符的盐字符串,但没有成功。
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);这个代码有什么问题吗?
我需要改变什么吗?
Joomla2.5是否使用了一种与我尝试的方法不同的新加密方法?
谢谢大家!
发布于 2014-09-23 19:08:42
目前,您正在创建的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();
}发布于 2014-09-23 19:07:07
我用以下两个问题解决了这个问题:
using php to create a joomla user password?
How convert byte array to string
希望它也能帮助到别人!
https://stackoverflow.com/questions/26001907
复制相似问题