我想byte[]
通过使用SHA1
算法对给定数组进行哈希处理SHA1Managed
。
该byte[]
散列将来自单元测试。
预期的哈希是0d71ee4472658cd5874c5578410a9d8611fc9aef
(区分大小写的)。
我该如何实现?
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
}
}
我想byte[]
通过使用SHA1
算法对给定数组进行哈希处理SHA1Managed
。
该byte[]
散列将来自单元测试。
预期的哈希是0d71ee4472658cd5874c5578410a9d8611fc9aef
(区分大小写的)。
我该如何实现?
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
}
}
Answers:
对于那些想要哈希的“标准”文本格式的用户,可以使用如下所示的内容:
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.Concat(hash.Select(b => b.ToString("x2")));
}
x2
表示小写,X2
大写
public string Hash(byte [] temp)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
var hash = sha1.ComputeHash(temp);
return Convert.ToBase64String(hash);
}
}
编辑:
在将字节数组转换为字符串时,还可以指定编码,如下所示:
return System.Text.Encoding.UTF8.GetString(hash);
要么
return System.Text.Encoding.Unicode.GetString(hash);
0d71ee4472658cd5874c5578410a9d8611fc9aef
提供输出?
这就是我去的。对于那些想要优化的人,请查看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)));
}
}
最快的方法是这样的:
public static string GetHash(string input)
{
return string.Join("", (new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(input))).Select(x => x.ToString("X2")).ToArray());
}
对于小字符输出,用于x2
替换X2
您可以使用以下命令“计算指定字节数组的值” ComputeHash
:
var hash = sha1.ComputeHash(temp);
如果要以字符串表示形式分析结果,则需要使用{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);
}
hex(e) == hex(E)