使用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使用了一种不同于我尝试的新加密方法吗?

谢谢大家!

使用C#为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用户密码?

如何将字节数组转换为字符串

希望它也能帮助到别人!