用于3DES和AES密钥的RNGCryptoServiceProvider

时间:2018-08-08 13:56:04

标签: .net cryptography

我看到有些人使用RNGCryptoServiceProviderAES3DESDES生成随机密钥。我也知道AES3DES键(https://crypto.stackexchange.com/questions/24210/128-bit-3des-key-and-aes-key-whats-the-difference)之间的区别。我的问题:是否可以使用此RNG为这些算法生成密钥,还是应该使用TripleDES.GenerateKey()AES.GenerateKey()?由于所有位都与AES的结果有关,因此使用此RNG不会有什么问题,但是我不确定3DES

1 个答案:

答案 0 :(得分:2)

默认的RNGCryptoServiceProvider使用操作系统的随机数生成器。这与GenerateKey方法将使用的随机数生成器完全相同。因此,实际上,通常差异将很小。

通常,您应该使用GenerateKey

  • 主要原因是它更具可读性,因此更易于维护。

  • RNGCryptoServiceProvider返回的字节不具有DES奇偶校验。通常,实现不关心DES密钥是否具有正确的奇偶校验,并且对于DES计算,它们将被完全忽略。但是,某些DES库可能需要DES奇偶校验,因此,如果分发它们,可能会遇到麻烦。

  • 使用GenerateKey也将允许使用硬件CSP,而密钥可以保留在硬件中。您可能会导入密钥,但随后该密钥将先在内存中;并非所有的硬件设备都允许轻松导入密钥,如果这样做,则它们被认为不太值得信赖。硬件设备还可以提供更安全的随机数生成器。

因此,除非您有令人信服的理由使用RNG(例如,之后需要直接导出密钥),否则我一定会尝试并使用指定的GenerateKey函数。

如果它们没有用,它们将不存在,对吧?