Yalnızca girilen kullanıcı adını ve parolayı doğrulayacak / doğrulayacaksanız, Rfc2898DerivedBytes sınıfını (Parola Tabanlı Anahtar Türetme İşlevi 2 veya PBKDF2 olarak da bilinir) kullanın. Bu, Triple DES veya AES gibi şifreleme kullanmaktan daha güvenlidir çünkü RFC2898DerivedBytes'in sonucundan parolaya geri dönmenin pratik bir yolu yoktur. Yalnızca bir paroladan sonuca gidebilirsiniz. Bkz . Şifre dizesinden şifreleme anahtarı ve IV türetirken SHA1 şifre karmasını bir tuz olarak kullanmak uygun mudur? .Net veya String şifreleme / şifre çözme için bir örnek ve tartışma için c # WinRT / Metro için Metro Stili .
Parolayı üçüncü bir tarafa sağlamak gibi yeniden kullanım için depoluyorsanız, Windows Veri Koruma API'sini (DPAPI) kullanın . Bu, bilgileri şifrelemek ve şifresini çözmek için işletim sistemi tarafından üretilen ve korunan anahtarları ve Üçlü DES şifreleme algoritmasını kullanır. Bu, uygulamanızın şifreleme anahtarlarını oluşturma ve koruma konusunda endişelenmesine gerek olmadığı anlamına gelir; bu, kriptografi kullanırken büyük bir endişe kaynağıdır.
C # 'da System.Security.Cryptography.ProtectedData sınıfını kullanın . Örneğin, bir veri parçasını şifrelemek için şunu kullanın 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);
Entropi ve şifreli metni, yalnızca geçerli kullanıcının okuyabilmesi için izinler ayarlanmış bir dosya veya kayıt defteri anahtarı gibi güvenli bir şekilde saklayın. Orijinal verilere erişmek için şunu kullanın ProtectedData.Unprotect()
:
byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,
DataProtectionScope.CurrentUser);
Ek güvenlik hususları olduğunu unutmayın. Örneğin, parolalar gibi sırları string
. Dizeler değişmezdir, bellekte bildirilemezler, bu nedenle uygulamanın belleğine veya bellek dökümüne bakan biri parolayı görebilir. Kullanım SecureString veya bayt [] yerine ve imha etme hatırlamak ya da en kısa şifre artık ihtiyaç olarak sıfır.