Saya sedang membuat aplikasi Windows, Anda harus masuk terlebih dahulu.
Detail akun terdiri dari nama pengguna dan kata sandi, dan mereka perlu disimpan secara lokal.
Ini hanya masalah keamanan, jadi orang lain yang menggunakan komputer yang sama tidak dapat melihat data pribadi semua orang.
Apa cara terbaik / teraman untuk menyimpan data ini?
Saya tidak ingin menggunakan database, jadi saya mencoba beberapa hal dengan file Resource.
Tetapi karena saya agak baru dalam hal ini, saya tidak sepenuhnya yakin dengan apa yang saya lakukan dan di mana saya harus mencari solusi.
Jawaban:
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()
: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()
: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.sumber
ProtectedData
adalah agar saya tidak perlu khawatir tentang Simpan entropi dan ciphertext dengan aman, ... jadi hanya pengguna saat ini yang dapat membacanya . Saya pikir ini menawarkan kesederhanaan karena saya dapat menyimpannya namun nyaman dan masih hanya CurrentUser yang dapat mendekripsinya. Theentropy
parameter juga opsional dan muncul mirip dengan IV di mana keunikan lebih penting daripada kerahasiaan. Dengan demikian, nilai mungkin dapat dihilangkan atau dikodekan secara keras ke dalam program dalam situasi di mana variasi dan pembaruan teks biasa jarang terjadi.Saya telah menggunakan ini sebelumnya dan saya pikir untuk memastikan kredensial tetap ada dan dengan cara terbaik yang aman
ConfigurationManager
kelasSecureString
kelasCryptography
namespace.Tautan ini akan sangat membantu Saya harap: Klik di sini
sumber
DPAPI hanya untuk tujuan ini. Gunakan DPAPI untuk mengenkripsi kata sandi pertama kali pengguna memasukkannya, simpan di lokasi yang aman (Registri pengguna, direktori data aplikasi Pengguna, adalah beberapa pilihan). Setiap kali aplikasi diluncurkan, periksa lokasi untuk melihat apakah kunci Anda ada, apakah menggunakan DPAPI untuk mendekripsinya dan mengizinkan akses, jika tidak, tolak.
sumber
Ini hanya berfungsi di Windows, jadi jika Anda berencana menggunakan lintas platform inti dotnet, Anda harus mencari di tempat lain. Lihat https://github.com/dotnet/corefx/blob/master/Documentation/architecture/cross-platform-cryptography.md
sumber
Saya ingin mengenkripsi dan mendekripsi string sebagai string yang dapat dibaca.
Berikut adalah contoh cepat yang sangat sederhana di C # Visual Studio 2019 WinForms berdasarkan jawaban dari
@Pradip
.Proyek klik kanan> properti> pengaturan> Buat
username
danpassword
pengaturan.Sekarang Anda dapat memanfaatkan pengaturan yang baru saja Anda buat. Di sini saya menyimpan
username
danpassword
tetapi hanya mengenkripsipassword
bidang nilai terhormat di dalamnya dalamuser.config
file.Contoh string terenkripsi dalam
user.config
file.Kode Lengkap
sumber