2

我们使用 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;
  }

}
4

0 回答 0