将md5散列字节数组转换为string

我怎样才能将哈希结果,这是一个字节数组,转换为一个string?

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

我需要将byteHashedPassword转换为一个string。

  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); 

我总觉得这是最方便的:

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

由于某些奇怪的原因,BitConverter喜欢在字节之间加上破折号,所以replace只是删除它们。

更新:如果你更喜欢“小写”hex,只是做一个.ToLower()和繁荣。

请注意,如果你这样做是一个严格的循环和许多操作,这可能是昂贵的,因为至less有两个隐含的string强制转换和resize。

您可以使用Convert.ToBase64StringConvert.FromBase64String轻松地将字节数组转换为string。

如果你在“hex偏好”阵营,你可以做到这一点。 这基本上是Philippe Leybaert的最低版本。

 string.Concat(hash.Select(x => x.ToString("X2"))) 

B1DB2CC0BAEE67EA47CFAEDBF2D747DF

好吧,因为它是一个散列,它可能具有不能以正常string显示的值,所以最好的办法是将其转换为Base64编码的string。

 string s = Convert.ToBase64String(bytes); 

并使用

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

获取字节。

那么你可以使用带字节和编码的string构造函数,但是你可能会很难pipe理string,因为它可能包含很多有趣的字符(空字节,换行符,控制字符等)

最好的方法是使用base 64进行编码,以得到一个易于使用的漂亮的string:

 string s = Convert.ToBase64String(bytes); 

并从该string返回到一个字节数组:

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

对于任何感兴趣的我所创build的名为CryptoStringify的Nuget包,您可以使用干净的语法将string转换为散列string,而无需使用字节数组:

 using (MD5 md5 = MD5.Create()) { string strHashedPassword = md5.Hash(password); } 

这是HashAlgorithmKeyedHashAlgorithm的一个扩展方法,所以也适用于SHA1,HMACSHA1,SHA256等。

https://www.nuget.org/packages/cryptostringify