【问题标题】:Generate AES key without password using BouncyCastle使用 BouncyCastle 生成无密码的 AES 密钥
【发布时间】:2015-06-18 06:27:53
【问题描述】:

在使用 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 个随机字节就足够了吗?

【问题讨论】:

    标签: c# encryption cryptography aes bouncycastle


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 到目前为止我已经得到: var cipher = new GcmBlockCipher(new AesFastEngine()); KeyParameter keyParameter = ParameterUtilities.CreateKeyParameter("AES", key); ICipherParameters cipherParameters = new ParametersWithIV(keyParameter, IV); cipher.Init(false, cipherParameters);当我查看密码的属性时,算法名称是 AES/GCM,但我仍然不知道如何设置填充
      • 我很抱歉,但由于某种原因,我从未见过这个答案。我很抱歉。接受您提供的 Right™ 方法。
      【解决方案3】:

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

      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 初始化一个 192 位密钥,如果你只是传递它“AES”。要获得不同的密钥大小,您需要修改参数,如代码示例中所示。要了解其他差异的概述,请查看 sourceCode 中的 GetKeyGenerator-Method。

      【讨论】:

        猜你喜欢
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        相关资源
        最近更新 更多