Почему мой вычисленный.NET хеш MD5 не эквивалентен хешу, вычисленному на веб-сайте?

DataContext в MainWindow не является DataContext в Page в Frame. Вы можете установить DataContext фрейма программно, хотя:

Page в Frame автоматически не наследует DataContext из MainWindow, но вы можете установить его свойство DataContext когда вы загружаете Page:

Home home = new Home();
home.DataContext = viewModel;
MyFrame.Content = home;
5
задан pc1oad1etter 10 October 2008 в 05:45
поделиться

5 ответов

При выполнении кода от сайта MSDN Вы заключаете в кавычки:

 // Hash an input string and return the hash as
    // a 32 character hexadecimal string.
    static string getMd5Hash(string input)
    {
            // Create a new instance of the MD5CryptoServiceProvider object.
            MD5 md5Hasher = MD5.Create();

            // Convert the input string to a byte array and compute the hash.
            byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string.
            return sBuilder.ToString();
        }


        static void Main(string[] args)
        {
            System.Console.WriteLine(getMd5Hash("password"));
        }

возвраты:

5f4dcc3b5aa765d61d8327deb882cf99
9
ответ дан 18 December 2019 в 14:54
поделиться

Эта версия VB.Net дает те же результаты как MySQL на основе моего собственного опыта:

Private Function MD5Hash(ByVal str As String) As String

    Dim md5 As MD5 = MD5CryptoServiceProvider.Create
    Dim hashed As Byte() = md5.ComputeHash(Encoding.Default.GetBytes(str))
    Dim sb As New StringBuilder

    For i As Integer = 0 To hashed.Length - 1
        sb.AppendFormat("{0:x2}", hashed(i))
    Next

    Return sb.ToString

End Function
0
ответ дан 18 December 2019 в 14:54
поделиться

Я получаю то же значение как тот веб-сайт о слове "пароль":

$ echo -n password | md5
5f4dcc3b5aa765d61d8327deb882cf99

Не видя код Вы на самом деле используете, трудно сказать то, что могло бы идти не так, как надо.

Что касается хранения хешей в базе данных, я храню их как шестнадцатеричную строку. Хотя большинство баз данных может обработать двоичные блобы, храня их, поскольку двоичный файл только сохраняет половину пространства, и их более трудно запросить и управлять. Возможности являются другими данными, которые Вы храните наряду с хешем, больше так или иначе.

0
ответ дан 18 December 2019 в 14:54
поделиться

У Вас есть какой-либо код, как Вы пытаетесь сделать это?

(ответ на второй Q) я обычно использую строковое поле и храню его как кодирование BASE64. Достаточно легкий работать с и сделать сравнения.

/// <summary>
/// Gets the Base 64 encoded SHA1 hashed password
/// </summary>
/// <returns>A Base 64 encoded string representing the SHA1 Hash of the password</returns>
public string ToBase64SHA1String()
{
    return Convert.ToBase64String(this.GetSHA1HashCode());

}
0
ответ дан 18 December 2019 в 14:54
поделиться

Также следует отметить, что суммы MD5 можно взломать с помощью радужных таблиц (в Интернете есть бесплатные программы, которые принимают сумму MD5 в качестве входных данных и выводят открытый текст - обычно это пароль)

SHA1 вероятно, лучший выбор ...

РЕДАКТИРОВАТЬ: добавление соли - хороший способ предотвратить обратное преобразование вашего хэша
РЕДАКТИРОВАТЬ 2: если бы я потрудился прочитать ваш пост, я бы « Я заметил, что вы уже упоминали, что планируете добавить соль

0
ответ дан 18 December 2019 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: