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

C# 使用BouncyCastle生成无密码的AES密钥,c#,encryption,cryptography,aes,bouncycastle,C#,Encryption,Cryptography,Aes,Bouncycastle,我需要生成一个密钥,以便在使用AES256/CBC对称加密文件时使用 密钥本身将使用RSA public/private加密,因此我不需要应用密码 在Java中,这似乎是可以做到的: 但是,SecretKeySpec未在通过NuGet提供的C#BouncyCastle库中定义 C#等价物是什么?由于我没有使用密码,只从SecureRandom(确实存在)中获取接下来的n个随机字节就足够了吗?您当然可以使用任何种子良好的PRNG使用Bouncy CastleKeyParameter类,是的。虽然不

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

密钥本身将使用RSA public/private加密,因此我不需要应用密码

在Java中,这似乎是可以做到的:

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


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

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

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

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


同样,您提供的Java代码对于AES也可以正常工作,但是如果您想在密码和模式之间进行推广,您应该使用KeyGenerator和AlgorithmParameterGeneratorAPI

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

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

注意:GetKeyGenerator的参数当前为AES启动一个192bit的密钥,如果您只传递它“AES”。要获得不同的键大小,需要修改参数,如代码示例所示。要获得更多差异的概述,请查看中的GetKeyGenerator方法。

我迄今为止得到的:var cipher=new GcmBlockCipher(new AesFastEngine());KeyParameter KeyParameter=ParameterUtilities.CreateKeyParameter(“AES”,键);ICipherParameters cipherParameters=新参数Swithiv(keyParameter,IV);cipher.Init(false,cipherParameters);当我观察密码的属性时,算法名称是AES/GCM,但我仍然不知道如何设置填充。我很抱歉,但出于某种原因,我从未看到过这个答案。我道歉。接受你提供的权利™ 做这件事的方法。
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