Как получить равный хэш для метода FormsAuthentication.HashPasswordForStoringInConfigFile ("asdf", "MD5")? - PullRequest
4 голосов
/ 17 ноября 2010

Поиск метода или указание в правильном направлении, чтобы я мог вернуть хэш, равный хэшу, возвращенному FormsAuthentication.HashPasswordForStoringInConfigFile("asdf", "MD5").Я пробовал код вроде:

        ASCIIEncoding encoding = new ASCIIEncoding();
        encoding.GetBytes("asdf");

        var hashedBytes = MD5.Create().ComputeHash(bytes);
        var password = encoding.GetString(hashedBytes);

Я не так силен в хешировании, поэтому я не знаю, куда идти дальше.Я всегда получаю сумасшедшие специальные символы, в то время как метод FormsAuth всегда возвращает что-то читаемое.

Просто пытаюсь удалить внешнюю зависимость от FormAuthentication из некоторых внутренних бизнес-классов.

Ответы [ 5 ]

9 голосов
/ 17 ноября 2010

Вот выход отражателя:

Ваша проблема не в использовании UTF8

public static string HashPasswordForStoringInConfigFile(string password, string passwordFormat)
{
    HashAlgorithm algorithm;
    if (password == null)
    {
        throw new ArgumentNullException("password");
    }
    if (passwordFormat == null)
    {
        throw new ArgumentNullException("passwordFormat");
    }
    if (StringUtil.EqualsIgnoreCase(passwordFormat, "sha1"))
    {
        algorithm = SHA1.Create();
    }
    else
    {
        if (!StringUtil.EqualsIgnoreCase(passwordFormat, "md5"))
        {
            throw new ArgumentException(SR.GetString("InvalidArgumentValue", new object[] { "passwordFormat" }));
        }
        algorithm = MD5.Create();
    }
    return MachineKeySection.ByteArrayToHexString(algorithm.ComputeHash(Encoding.UTF8.GetBytes(password)), 0);
}

Так вот ваш обновленный код:

    encoding.GetBytes("asdf");

    var hashedBytes = MD5.Create().ComputeHash(bytes);
    var password = Encoding.UTF8.GetString(hashedBytes);
6 голосов
/ 13 января 2012

После некоторого поиска в Google я изменил код @ Питера, чтобы сделать его независимым от System.Web

return string.Join("",
  new MD5CryptoServiceProvider().ComputeHash(
    new MemoryStream(Encoding.UTF8.GetBytes(password))).Select(x => x.ToString("X2")));
4 голосов
/ 20 сентября 2012

Этот ответ выводится из ваших ответов:

Этот метод в .NET эквивалентен sha1 в php:

string sha1Hash(string password)
{
    return string.Join("", SHA1CryptoServiceProvider.Create().ComputeHash(Encoding.UTF8.GetBytes(password)).Select(x => x.ToString("X2"))).ToLower();
}
3 голосов
/ 17 ноября 2010

Ниже приведен фактический код, использованный для создания пароля с помощью этого метода:

System.Web.Configuration.MachineKeySection.ByteArrayToHexString(
    System.Security.Cryptography.MD5.Create().ComputeHash(
        Encoding.UTF8.GetBytes(password)
    ), 0
);
2 голосов
/ 07 января 2015
public static string sha1Hash(string password)
    {
           return string.Join("", MD5.Create().ComputeHash(Encoding.ASCII.GetBytes(password)).Select(s => s.ToString("x2"))).ToLower();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...