我有一些
string
,我想使用 C# 使用 SHA-256 哈希函数对它进行hash。我想要这样的东西:
string hashString = sha256_hash("samplestring");
框架中是否有内置的东西可以做到这一点?
实现可能是这样的
public static String sha256_hash(String value) {
StringBuilder Sb = new StringBuilder();
using (SHA256 hash = SHA256Managed.Create()) {
Encoding enc = Encoding.UTF8;
Byte[] result = hash.ComputeHash(enc.GetBytes(value));
foreach (Byte b in result)
Sb.Append(b.ToString("x2"));
}
return Sb.ToString();
}
编辑: Linq 实现更加简洁,但可能可读性较差:
public static String sha256_hash(String value) {
using (SHA256 hash = SHA256Managed.Create()) {
return String.Concat(hash
.ComputeHash(Encoding.UTF8.GetBytes(value))
.Select(item => item.ToString("x2")));
}
}
编辑 2: .NET Core , .NET5, .NET6 ...
public static String sha256_hash(string value)
{
StringBuilder Sb = new StringBuilder();
using (var hash = SHA256.Create())
{
Encoding enc = Encoding.UTF8;
byte[] result = hash.ComputeHash(enc.GetBytes(value));
foreach (byte b in result)
Sb.Append(b.ToString("x2"));
}
return Sb.ToString();
}
从 .NET 5 开始,您可以使用新的
Convert.ToHexString
方法将哈希字节数组转换为(十六进制)字符串,而无需使用 StringBuilder
或 .ToString("X0")
等:
public static string HashWithSHA256(string value)
{
using var hash = SHA256.Create();
var byteArray = hash.ComputeHash(Encoding.UTF8.GetBytes(value));
return Convert.ToHexString(byteArray);
}
我正在寻找一个在线解决方案,并且能够从 Dmitry 的回答中编译以下内容:
public static String sha256_hash(string value)
{
return (System.Security.Cryptography.SHA256.Create()
.ComputeHash(Encoding.UTF8.GetBytes(value))
.Select(item => item.ToString("x2")));
}
我尝试了以上所有方法,但没有一个对我有用。这是我制作的完美运行的:
public static string Encrypt(string input)
{
using (SHA256 sha256 = SHA256.Create())
{
// Convert the input string to a byte array
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
// Compute the hash value of the input bytes
byte[] hashBytes = sha256.ComputeHash(inputBytes);
// Convert the hash bytes to a hexadecimal string
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("x2"));
}
return sb.ToString();
}
}
确保在代码开头使用 System.Security.Cryptography
using System.Security.Cryptography
简单:
string sha256_hash(string s) => Convert.ToHexString(SHA256.HashData(Encoding.UTF8.GetBytes(s)));