C # MD5 Hash результаты не ожидаемый результат - PullRequest
4 голосов
/ 10 августа 2009

Я пробовал каждый пример, который могу найти в Интернете, но я не могу получить свой код .NET для получения тех же результатов хеширования MD5 из моего приложения VB6.

Приложение VB6 выдает идентичные результаты для этого сайта: http://www.functions -online.com / md5.html

Но я не могу получить те же результаты для одного и того же ввода в C # (используя метод MD5.ComputeHash или метод шифрования FormsAuthentication)

Пожалуйста, помогите !!!!

По запросу, здесь приведен код. Это вытащил прямо из MSDN:

    public string hashString(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();
    }

Моя тестовая строка:

QWERTY123TEST

Результаты этого кода:

8c31a947080131edeaf847eb7c6fcad5

Результат теста MD5:

f6ef5dc04609664c2875895d7da34eb9

Примечание: результат TestMD5 - это то, что я ожидаю

Примечание: я был очень, очень глуп, извините - просто понял, что у меня неправильный ввод. Как только я жестко закодировал это, это работало. Спасибо за помощь

Ответы [ 2 ]

16 голосов
/ 10 августа 2009

Это метод C # MD5, который, как я знаю, работает, я использовал его для аутентификации через различные веб-интерфейсы API restful

   public static string GetMD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        bs = x.ComputeHash(bs);
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        return s.ToString();

    }
1 голос
/ 20 августа 2009

Что делает сайт "functions-online" (http://www.functions -online.com / md5.html ) авторитетом в MD5? Для меня это работает нормально только для ISO-8859-1. Но когда я пытаюсь вставить в него что-либо, кроме ISO-8859-1, он возвращает тот же хэш MD5. Попробуйте саму кириллицу B, кодовую точку 0x412. Или попробуйте ханьский китайский символ воды, кодовая точка 0x98A8. Насколько я знаю, опубликованный апплет C # правильный.

...