Jika Anda hanya akan memverifikasi / memvalidasi nama pengguna dan kata sandi yang dimasukkan, gunakan kelas Rfc2898DerivedBytes (juga dikenal sebagai Fungsi Penurunan Kunci Berbasis Kata Sandi 2 atau PBKDF2). Ini lebih aman daripada menggunakan enkripsi seperti Triple DES atau AES karena tidak ada cara praktis untuk beralih dari hasil RFC2898DerivedBytes kembali ke kata sandi. Anda hanya dapat beralih dari kata sandi ke hasilnya. Lihat Apakah boleh menggunakan hash sandi SHA1 sebagai salt saat mendapatkan kunci enkripsi dan IV dari string sandi? untuk contoh dan pembahasan untuk .Net atau String encrypt / decrypt dengan kata sandi c # Metro Style untuk WinRT / Metro.
Jika Anda menyimpan kata sandi untuk digunakan kembali, seperti memasoknya ke pihak ketiga, gunakan Windows Data Protection API (DPAPI) . Ini menggunakan kunci yang dihasilkan dan dilindungi sistem operasi dan algoritma enkripsi Triple DES untuk mengenkripsi dan mendekripsi informasi. Ini berarti aplikasi Anda tidak perlu khawatir tentang pembuatan dan perlindungan kunci enkripsi, masalah utama saat menggunakan kriptografi.
Di C #, gunakan kelas System.Security.Cryptography.ProtectedData . Misalnya, untuk mengenkripsi suatu data, gunakan ProtectedData.Protect()
:
// Data to protect. Convert a string to a byte[] using Encoding.UTF8.GetBytes().
byte[] plaintext;
// Generate additional entropy (will be used as the Initialization vector)
byte[] entropy = new byte[20];
using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(entropy);
}
byte[] ciphertext = ProtectedData.Protect(plaintext, entropy,
DataProtectionScope.CurrentUser);
Simpan entropi dan ciphertext dengan aman, seperti dalam file atau kunci registri dengan izin yang ditetapkan sehingga hanya pengguna saat ini yang dapat membacanya. Untuk mendapatkan akses ke data asli, gunakan ProtectedData.Unprotect()
:
byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,
DataProtectionScope.CurrentUser);
Perhatikan bahwa ada pertimbangan keamanan tambahan. Misalnya, hindari menyimpan rahasia seperti sandi sebagai file string
. String tidak dapat diubah, karena tidak dapat diberitahukan dalam memori sehingga seseorang yang melihat memori aplikasi atau dump memori dapat melihat sandi. Gunakan SecureString atau byte [] sebagai gantinya dan ingat untuk membuang atau membolosnya segera setelah kata sandi tidak lagi diperlukan.