Преобразование md5 хеширует массив байтов к строке

Как я могу преобразовать хешированный результат, который является массивом байтов к строке?

byte[] bytePassword = Encoding.UTF8.GetBytes(password);

using (MD5 md5 = MD5.Create())
{
    byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
} 

Я должен преобразовать byteHashedPassword к строке.

72
задан Scott Arciszewski 28 May 2019 в 20:47
поделиться

5 ответов

   public static string ToHex(this byte[] bytes, bool upperCase)
    {
        StringBuilder result = new StringBuilder(bytes.Length*2);

        for (int i = 0; i < bytes.Length; i++)
            result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));

        return result.ToString();
    }

Затем вы можете вызвать его как метод расширения:

string hexString = byteArray.ToHex(false);
74
ответ дан 24 November 2019 в 12:31
поделиться

Я всегда считал это наиболее удобным:

string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");

По какой-то странной причине BitConverter любит ставить тире между байтами, поэтому при замене они просто удаляются.

Обновление: Если вы предпочитаете шестнадцатеричный код в нижнем регистре, просто выполните .ToLower () и стрелку.

Обратите внимание, что если вы делаете это как жесткий цикл и много операций, это может быть дорогостоящим, поскольку выполняется как минимум два неявных преобразования строк и изменения размеров.

63
ответ дан 24 November 2019 в 12:31
поделиться

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

Лучший способ сделать это - закодировать ее с базой 64, чтобы получить хорошую строку, с помощью которую легко работать:

string s = Convert.ToBase64String(bytes);

И перейти от этой строки обратно к массиву байтов:

byte[] bytes = Convert.FromBase64String(s);
3
ответ дан 24 November 2019 в 12:31
поделиться

Вы можете использовать Convert.ToBase64String и Convert.FromBase64String, чтобы легко преобразовать байтовые массивы в строки.

24
ответ дан 24 November 2019 в 12:31
поделиться

Поскольку это хэш, он может иметь значения, которые не могут быть показаны в обычной строке, поэтому лучше всего преобразовать его в строку в кодировке Base64.

string s = Convert.ToBase64String(bytes);

и использовать

byte[] bytes = Convert.FromBase64(s);

для получения байтов обратно.

8
ответ дан 24 November 2019 в 12:31
поделиться
Другие вопросы по тегам:

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