ble*_*h10 4 c# random encryption aes
所以我在线检查一些实现,我注意到有些人使用以下方式生成密钥:
using (var random = RandomNumberGenerator.Create())
{
var key = new byte[32];
random.GetBytes(key);
}
Run Code Online (Sandbox Code Playgroud)
而其他人则使用AES类中构建的generateKey方法:
using (Aes myAes = Aes.Create())
{
myAes.GenerateKey();
var key = myAes.Key;
}
Run Code Online (Sandbox Code Playgroud)
它们都在System.Security.Cryptography库中,只是想知道它们之间是否存在实际差异,如果是,我应该选择哪一个?
两个版本都做同样的事情.Aes.GenerateKey将使用与RandomNumberGenerator.Create()第一个示例相同的方法来生成新密钥.
但是我更喜欢使用第二个版本,因为:
1)它表达了非常明确的意图.您正在生成AES密钥,而不仅仅是任意随机字节数组.
2)AES可以有不同的密钥大小.不仅如此,一些密钥大小对AES无效.第一个示例现在仅生成32字节密钥.如果您将其修改为接受密钥大小 - 有人可以将无效(对于AES)密钥大小传递给它.因此,您需要验证传递的大小,以验证它是AES的有效密钥大小.但是,如果Aes上课已经为你做了那么,为什么呢?
旁注:没有必要打电话GenerateKey,虽然它也没有伤害.如果还没有密钥 - 它将在您第一次访问Key属性时生成.