Преобразование массива байтов хэша md5 в строку
Как преобразовать хешированный результат, который является байтовым массивом, в строку?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
Мне нужно преобразовать byteHashedPassword
в строку.
Ответы
Ответ 1
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);
Ответ 2
Я всегда считал это наиболее удобным:
string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");
По какой-то нечетной причине BitConverter любит ставить тире между байтами, поэтому замена просто удаляет их.
Обновление:
Если вы предпочитаете "нижний регистр", просто выполните .ToLower() и стрелу.
Заметьте, что если вы делаете это как жесткий цикл и много ops, это может быть дорогостоящим, поскольку есть как минимум две неявные строковые трансляции и изменения размеров.
Ответ 3
Вы можете использовать Convert.ToBase64String
и Convert.FromBase64String
, чтобы легко преобразовывать массивы байтов в строки.
Ответ 4
Если вы находитесь в лагере "Hex preference", вы можете это сделать. Это в основном минимальная версия ответа Филиппа Лейбарта.
string.Concat(hash.Select(x => x.ToString("X2")))
B1DB2CC0BAEE67EA47CFAEDBF2D747DF
Ответ 5
Ну, так как это хэш, у него есть значения, которые невозможно показать в нормальной строке, поэтому лучше всего преобразовать его в кодировку Base64.
string s = Convert.ToBase64String(bytes);
и используйте
byte[] bytes = Convert.FromBase64(s);
чтобы вернуть байты.
Ответ 6
Ну, вы можете использовать конструктор строк, который принимает байты и кодировку, но из-за этого вам вряд ли удастся управлять строкой, поскольку она может содержать много веселых символов (нулевые байты, символы новой строки, контрольные символы и т.д.). )
Лучший способ сделать это - закодировать его с базой 64, чтобы получить хорошую строку, с которой легко работать:
string s = Convert.ToBase64String(bytes);
И перейти от этой строки к массиву байтов:
byte[] bytes = Convert.FromBase64String(s);
Ответ 7
Для всех, кого интересует пакет Nuget, который я создал под названием CryptoStringify, вы можете преобразовать строку в хеш-строку с использованием чистого чистого синтаксиса без необходимости играть с байтовыми массивами:
using (MD5 md5 = MD5.Create())
{
string strHashedPassword = md5.Hash(password);
}
Это метод расширения на HashAlgorithm
и KeyedHashAlgorithm
, поэтому работает и на SHA1, HMACSHA1, SHA256 и т.д.
https://www.nuget.org/packages/cryptostringify