Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mencincang Kata Laluan dengan Selamat dalam .NET Menggunakan PBKDF2?

Bagaimana untuk Mencincang Kata Laluan dengan Selamat dalam .NET Menggunakan PBKDF2?

Barbara Streisand
Barbara Streisandasal
2025-01-23 12:32:12806semak imbas

How to Securely Hash Passwords in .NET Using PBKDF2?

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:

  • Dapatkan cincang kata laluan yang disimpan daripada pangkalan data.
  • Ekstrak garam dan bait cincang daripada nilai cincang yang disimpan.
  • Kira cincang baharu menggunakan kata laluan yang dimasukkan oleh pengguna dan garam yang diekstrak.
  • Bandingkan cincang yang dikira dengan cincang yang disimpan. Jika ia sepadan, kata laluan itu sah.
<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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn