Gunakan amalan terbaik semasa untuk mencincang kata laluan dengan selamat dalam .NET
Apabila menyimpan kata laluan dalam pangkalan data, adalah penting untuk melindungi maklumat sensitif menggunakan algoritma pencincangan. Kaedah penyulitan tidak sesuai untuk tujuan ini. Algoritma pencincangan kata laluan asli terbaik dalam .NET ialah PBKDF2 (Fungsi Terbitan Utama Berasaskan Kata Laluan 2).
Panduan langkah demi langkah untuk pencincangan kata laluan menggunakan PBKDF2
Langkah 1: Jana nilai garam
Garam ialah nilai rawak yang digunakan untuk menjadikan cincangan setiap kata laluan unik. Cipta nilai garam menggunakan PRNG kriptografi (penjana nombor rawak pseudo):
<code class="language-csharp">byte[] salt; new RNGCryptoServiceProvider().GetBytes(salt = new byte[16]);</code>
Langkah 2: Cipta objek PBKDF2 dan hitung nilai cincang
Segera kelas Rfc2898DeriveBytes
dan nyatakan kata laluan, garam dan bilangan lelaran yang diingini (~100,000 disyorkan):
<code class="language-csharp">var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20);</code>
Langkah 3: Gabungkan garam dan bait sifir untuk penyimpanan
Gabungkan bait garam dan kata laluan untuk mencipta rentetan tunggal untuk penyimpanan pangkalan data:
<code class="language-csharp">byte[] hashBytes = new byte[36]; Array.Copy(salt, 0, hashBytes, 0, 16); Array.Copy(hash, 0, hashBytes, 16, 20);</code>
Langkah 4: Tukar kepada rentetan Base64 untuk storan
Enkodkan bait gabungan ke dalam rentetan Base64 untuk penyimpanan dalam pangkalan data:
<code class="language-csharp">string savedPasswordHash = Convert.ToBase64String(hashBytes);</code>
Langkah 5: Sahkan kata laluan yang dimasukkan oleh pengguna
Untuk mengesahkan bahawa kata laluan yang dimasukkan oleh pengguna sepadan dengan cincang yang disimpan:
<code class="language-csharp">string savedPasswordHash = DBContext.GetUser(u => u.UserName == user).Password; byte[] hashBytes = Convert.FromBase64String(savedPasswordHash); byte[] salt = new byte[16]; Array.Copy(hashBytes, 0, salt, 0, 16); var pbkdf2 = new Rfc2898DeriveBytes(password, salt, 100000); byte[] hash = pbkdf2.GetBytes(20); for (int i=0; i < 20; i++) if (hashBytes[i+16] != hash[i]) throw new UnauthorizedAccessException();</code>
Nota: Bilangan lelaran boleh dilaraskan berdasarkan keperluan prestasi aplikasi. Nilai minimum yang disyorkan secara amnya ialah 10,000.
Atas ialah kandungan terperinci Bagaimana untuk Mencincang Kata Laluan dengan Selamat dalam .NET Menggunakan PBKDF2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!