我需要生成一个密钥,以便在使用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 随机字节就足够了吗?
答案 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。