c#
でハッシュ文字列を取得しようとすると問題が発生します。
私はすでにいくつかのウェブサイトを試しましたが、それらのほとんどはハッシュを取得するためにファイルを使用しています。文字列用の他のものは少し複雑すぎます。次のようなWebのWindows認証の例を見つけました。
FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")
ファイル名を含む文字列をより安全にするために、ハッシュを使用する必要があります。どうやってやるの?
例:
string file = "username";
string hash = ??????(username);
「md5」ではなく、別のハッシュアルゴリズムを使用する必要がありますか?
using System.Security.Cryptography;
public static byte[] GetHash(string inputString)
{
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 with VB.NETのAES を参照してください。
//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();
}