使用BouncyCastle生成无密码的AES密钥

时间:2015-04-13 02:14:14

标签: c# encryption cryptography aes bouncycastle

我需要生成一个密钥,以便在使用AES256 / CBC对称加密文件时使用

密钥本身将使用RSA公共/私有加密,因此我不需要应用密码。

在Java中,这似乎是as follows

SecureRandom random = new SecureRandom();
byte[] keyBytes = new byte[32]; //32 Bytes = 256 Bits
random.nextBytes(keyBytes);
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");

但是,SecretKeySpec未在NuGet提供的C#BouncyCastle库中定义。

什么是C#等价物?由于我没有使用密码,只需从SecureRandom(确实存在)中获取下一个 n 随机字节就足够了吗?

3 个答案:

答案 0 :(得分:1)

你当然可以使用任何种子播种的PRNG使用Bouncy Castle KeyParameter课程,是的。虽然您不必指定算法,但KeyParameter类的处理方式与SecretKeySpec大致相同。

答案 1 :(得分:1)

只要您使用AES,就可以直接构建KeyParameter类。然而,存在具有已知弱密钥类和/或对有效密钥的其他限制的对称算法,例如, DESEDE。

如果您的代码需要一般地处理多种算法(或模式),那么最好使用Org.BouncyCastle.Security.GeneratorUtilites为算法获取适当的密钥生成器。同样,参数实用程序在一般情况下是优选的,例如添加IV。

同样,您提供的Java代码也适用于AES,但如果您想跨密码和模式进行推广,则应该使用KeyGenerator和AlgorithmParameterGenerator API。

答案 2 :(得分:0)

以下是您可以尝试的解决方案:

using Org.BouncyCastle.Crypto;  
using Org.BouncyCastle.Security; 


CipherKeyGenerator gen = new CipherKeyGenerator();

gen = GeneratorUtilities.GetKeyGenerator("AES256"); // using AES

byte[] k = gen.GenerateKey(); // 256 bit key

注意:如果仅将其传递给“ AES”,则GetKeyGenerator的参数当前将为AES启动192位密钥。要获得不同的密钥大小,您需要修改代码示例中所示的参数。要获得其他差异的概述,请查看sourceCode中的GetKeyGenerator-Method。