我们使用 AES 加密来加密数据。使用某些应用程序(即控制台)每年生成一次密钥,那么我必须选择哪种方式来生成密钥?
1. 我们需要使用 Pass Phrase 方法生成密钥吗?
2.或者我们必须选择AESCryptoServiceProvider提供的默认生成密钥?
以下方法使用密码短语来生成加密。
方法一:
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
用于生成密钥,我们没有使用密码短语
方法二:
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;
}
}