【问题标题】:Encrypt in Java and Decrypt in C# with Rijndael使用 Rijndael 在 Java 中加密和在 C# 中解密
【发布时间】:2010-11-03 10:52:49
【问题描述】:

使用 Rijndael 算法是否可以加密配置文件(或配置文件中的部分),然后在 Java 中解密该文件?可以做出如下假设:

  1. 传入IV(不是自动生成的idea :: GenerateIV();)
  2. 输入密钥
  3. BlockSize 为 128(标准)

假设这可以做到,我的下一个问题是:

  1. keySize 可以是 256 吗?我知道 128 是 AES,但我们想使用 256。我也不知道 Java 是否有 256 的提供程序,或者我是否需要使用 BouncyCastle
  2. 什么是填充? PKCS7?
  3. 我假设 CiperMode 是 CBC

在 c# 中有这样的东西吗?但是,不知道它是否可以用 Java 解密......也许甚至我的 c# 是错误的?

public static void initCrypt()
    {
        byte[] keyBytes = System.Text.UTF8Encoding.UTF8.GetBytes("abcdefghijklmnop");

        rijndaelCipher = new RijndaelManaged();
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(keyBytes, new SHA1CryptoServiceProvider().ComputeHash(keyBytes));
        byte[] key = pdb.GetBytes(32);
        byte[] iv = pdb.GetBytes(16);
        rijndaelCipher.Mode = CipherMode.CBC;
        rijndaelCipher.Padding = PaddingMode.PKCS7; //PaddingMode.PKCS7 or None or Zeros
        rijndaelCipher.KeySize = 256; //192, 256
        rijndaelCipher.BlockSize = 128;
        rijndaelCipher.Key = keyBytes;
        rijndaelCipher.IV = iv;
    }

【问题讨论】:

    标签: c# java encryption rijndaelmanaged aes


    【解决方案1】:

    我会检查诸如keyczar 之类的外部库是否支持此功能。

    正如 Jeff Atwood has taught us in his blog 最近所说,99% 的开发人员不应该关心加密例程的底层细节(因为我们可能会把它们搞砸)。

    【讨论】:

    • 绝对 - 为什么我推荐一个外部程序。
    • 他提到使用 bouncycastle 作为一个例子来抽象这一点。我确实想这样做,所以我没有做太大的不同......我只是想确保提供程序跨平台工作。
    • 好吧,加密算法只是算法,对吧?因此,它不应该依赖于平台。你可以用一种语言加密文件的任何一系列步骤,你应该能够用任何其他语言编写代码然后解密它。如果不是,那么您的算法有问题。
    【解决方案2】:

    根据您对该配置文件的使用情况,您可能需要使用外部程序。

    例如,如果您想在配置文件驻留在磁盘时对其进行保护,但您可以在程序运行时将其内容保存在内存中,您可以使用gpg 来加密文件,解密当你启动它时,它使用程序所需的用户提供的密码进入内存,然后在你关闭程序时清除内存。[1]

    [1] 值得注意的是,由于内存分页等原因,没有真正的方法可以保证内容不会写入磁盘。这取决于操作系统和很多因素,如果您对它感兴趣,可以查找。

    【讨论】:

      【解决方案3】:

      Q1 : 必须是 128 否则你将不得不使用 BouncyCastle

      Q2 : 是 PKCS7

      Q3:是的 CBC

      如果您的问题还没有结束,我可以给您提供 c# 和 java 的工作示例

      【讨论】:

      • 我有兴趣查看示例..我正在尝试做类似的事情
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2015-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多