Генерировать ключ, используя Pass Phrase или AesCryptoServiceProvider?
Мы используем шифрование AES для шифрования данных. Генерация ключа один раз в год с использованием какого-либо приложения (например, консоли), так какой путь мне нужно выбрать для генерации ключа?
1. Нужно ли генерировать ключ, используя метод Pass Phrase?
2. Или мы должны выбрать генерирующий ключ по умолчанию, предоставляемый AESCryptoServiceProvider?
Приведенный ниже метод использует Pass Phrase для генерации шифрования.
Способ 1:
private static readonly byte[] Salt = new byte[] { 10, 20, 30, 40, 50, 60, 70, 80 };
private static byte[] CreateKey(string password, int keyBytes = 32)
{
const int Iterations = 300;
var keyGenerator = new Rfc2898DeriveBytes(password, Salt, Iterations);
return Convert.FromBase64String(keyGenerator.GetBytes(keyBytes));
}
Метод ниже использует AesCryptoServiceProvider
для генерации ключа, и мы не использовали пароль
Способ 2:
var Key = default(string);
using (var provider = new AesCryptoServiceProvider())
{
provider.GenerateKey();
Key = System.Text.Encoding.ASCII.GetString(provider.Key);
}
Редактировать:
мы можем использовать этот метод генерации случайных чисел?
public static byte[] RandomNumberGenerator()
{
var rngBytes = new byte[32];
using (RandomNumberGenerator objNumberGenerator = new RNGCryptoServiceProvider())
{
objNumberGenerator.GetBytes(rngBytes);
return rngBytes;
}
}