用C#中的SHA1algorithm散列

我想使用SHA1Managed使用SHA1algorithm散列给定的byte[]数组。
byte[]散列将来自unit testing。
预期的散列是0d71ee4472658cd5874c5578410a9d8611fc9aef (区分大小写)。

我怎样才能做到这一点?

 public string Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { } } 

对于那些想要散列的“标准”文本格式的人,可以使用如下所示的内容:

 static string Hash(string input) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input)); var sb = new StringBuilder(hash.Length * 2); foreach (byte b in hash) { // can be "x2" if you want lowercase sb.Append(b.ToString("X2")); } return sb.ToString(); } } 

这将产生一个像0C2E99D0949684278C30B9369B82638E1CEAD415的散列。

或者代码高尔夫版本:

 static string Hash(string input) { var hash = (new SHA1Managed()).ComputeHash(Encoding.UTF8.GetBytes(input)); return string.Join("", hash.Select(b => b.ToString("x2")).ToArray()); } 
 public string Hash(byte [] temp) { using (SHA1Managed sha1 = new SHA1Managed()) { var hash = sha1.ComputeHash(temp); return Convert.ToBase64String(hash); } } 

编辑:

将字节数组转换为string时,还可以指定编码,如下所示:

 return System.Text.Encoding.UTF8.GetString(hash); 

要么

 return System.Text.Encoding.Unicode.GetString(hash); 

这是我一起去的。 对于那些想要优化的人,请查看https://stackoverflow.com/a/624379/991863

  public static string Hash(string stringToHash) { using (var sha1 = new SHA1Managed()) { return BitConverter.ToString(sha1.ComputeHash(Encoding.UTF8.GetBytes(stringToHash))); } } 

您可以使用ComputeHash “计算指定的字节数组的值”:

 var hash = sha1.ComputeHash(temp); 

如果要分析string表示forms的结果,则需要使用{0:X2}格式说明符来格式化字节。

我会在这里扔我的帽子:

(作为静态类的一部分,因为这个片段是两个扩展)

 //hex encoding of the hash, in uppercase. public static string Sha1Hash (this string str) { byte[] data = UTF8Encoding.UTF8.GetBytes (str); data = data.Sha1Hash (); return BitConverter.ToString (data).Replace ("-", ""); } // Do the actual hashing public static byte[] Sha1Hash (this byte[] data) { using (SHA1Managed sha1 = new SHA1Managed ()) { return sha1.ComputeHash (data); } 

最快的方法是这样的:

  public static string GetHash(string input) { return string.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray()); } 

对于小字符输出,使用x2来代替X2