[英]Hash string in c#
嘗試在c#
獲取哈希字符串時遇到問題。
我已經嘗試了幾個網站,但大多數都使用文件來獲取哈希值。 其他用於字符串的有點太復雜了。 我找到了像這樣的 Windows 身份驗證示例:
FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")
我需要使用散列來使包含文件名的字符串更安全。 我怎樣才能做到這一點?
例子:
string file = "username";
string hash = ??????(username);
我應該使用另一種散列算法而不是“md5”嗎?
using System.Security.Cryptography;
public static byte[] GetHash(string inputString)
{
using (HashAlgorithm algorithm = SHA256.Create())
return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}
public static string GetHashString(string inputString)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in GetHash(inputString))
sb.Append(b.ToString("X2"));
return sb.ToString();
}
附加說明
獲取用於密碼存儲目的的哈希字符串的最快方法是以下代碼:
internal static string GetStringSha256Hash(string text)
{
if (String.IsNullOrEmpty(text))
return String.Empty;
using (var sha = new System.Security.Cryptography.SHA256Managed())
{
byte[] textData = System.Text.Encoding.UTF8.GetBytes(text);
byte[] hash = sha.ComputeHash(textData);
return BitConverter.ToString(hash).Replace("-", String.Empty);
}
}
備注:
sha
變量的創建重構為一個類字段;我不太了解您問題的全部范圍,但是如果您只需要字符串的哈希值,那么很容易得到它。
只需使用 GetHashCode 方法。
像這樣:
string hash = username.GetHashCode();
我認為你要找的不是散列而是加密。 使用散列,您將無法從“散列”變量中檢索原始文件名。 使用加密可以,而且它是安全的。
有關 .NET 中加密的更多信息,請參閱ASP.NET 中的 AES 和 VB.NET 。
//Secure & Encrypte Data
public static string HashSHA1(string value)
{
var sha1 = SHA1.Create();
var inputBytes = Encoding.ASCII.GetBytes(value);
var hash = sha1.ComputeHash(inputBytes);
var sb = new StringBuilder();
for (var i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
如果性能不是主要問題,您還可以使用以下任何一種方法:
(如果您希望哈希字符串為大寫,請將"x2"
替換為"X2"
。)
public static string SHA256ToString(string s)
{
using (var alg = SHA256.Create())
return string.Join(null, alg.ComputeHash(Encoding.UTF8.GetBytes(s)).Select(x => x.ToString("x2")));
}
或:
public static string SHA256ToString(string s)
{
using (var alg = SHA256.Create())
return alg.ComputeHash(Encoding.UTF8.GetBytes(s)).Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.ToString("x2"))).ToString();
}
有史以來最短和最快的方式。 只有1行!
public static string StringSha256Hash(string text) =>
string.IsNullOrEmpty(text) ? string.Empty : BitConverter.ToString(new System.Security.Cryptography.SHA256Managed().ComputeHash(System.Text.Encoding.UTF8.GetBytes(text))).Replace("-", string.Empty);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.