Saya mengalami masalah saat mencoba memasukkan string hash c#
.
Saya sudah mencoba beberapa situs web, tetapi kebanyakan dari mereka menggunakan file untuk mendapatkan hash. Yang lain untuk string agak terlalu rumit. Saya menemukan contoh untuk otentikasi Windows untuk web seperti ini:
FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")
Saya perlu menggunakan hash untuk membuat string yang berisi nama file lebih aman. Bagaimana saya bisa melakukan itu?
Contoh:
string file = "username";
string hash = ??????(username);
Haruskah saya menggunakan algoritme hashing lain dan bukan "md5"?
b.ToString("X2")
maksudnya ini ?Cara tercepat, untuk mendapatkan string hash untuk tujuan penyimpanan kata sandi, adalah kode berikut:
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); } }
Catatan:
sha
variabel harus direfraktorisasi menjadi bidang kelas;sumber
SHA1Managed
kelas tidak terlalu mahal. itu memakan sekitar 130 byte dan menginisialisasinya ke beberapa nilai statis, tapi itu saja. jadi seharusnya tidak ada masalah kinerja dalam banyak kasus.SHA1Managed
adalahIDisposable
sehingga membutuhkan untuk membungkus penggunaannya menjadiusing
blok.Dispose
Metode tujuan adalah untuk menghapus buffer internal. Kegagalan untuk melakukannya akan berisiko mengalami serangan memori.SHA1Managed
tidak mahal maksud saya pembuatannya tidak. Selain itu, algoritma hashing tidak perlu mahal. Ini hanya harus (sangat) mahal ketika Anda ingin menemukan tabrakan.Saya tidak benar-benar memahami cakupan penuh pertanyaan Anda, tetapi jika yang Anda butuhkan hanyalah hash string, maka sangat mudah untuk mendapatkannya.
Cukup gunakan metode GetHashCode.
Seperti ini:
string hash = username.GetHashCode();
sumber
GetHashCode
ini bukanlah algoritme hashing yang aman secara kriptografis. Gunakan SHA256 setidaknya atau bahkan lebih baik gunakan BCrypt atau Scrypt untuk algoritma yang aman.Saya pikir yang Anda cari bukanlah hashing, tetapi enkripsi. Dengan hashing, Anda tidak akan dapat mengambil nama file asli dari variabel "hash". Dengan enkripsi Anda bisa, dan itu aman.
Lihat AES di ASP.NET dengan VB.NET untuk informasi selengkapnya tentang enkripsi di .NET.
sumber
//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(); }
sumber
Jika performa bukan masalah utama, Anda juga dapat menggunakan salah satu metode berikut:
(Jika Anda ingin string hash menggunakan huruf besar, ganti
"x2"
dengan"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"))); }
atau:
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(); }
sumber
Cara terpendek dan tercepat yang pernah ada. Hanya 1 baris!
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);
sumber