使用Rijndael在Java中解密并在C#中解密

时间:2009-06-16 19:02:27

标签: c# java encryption rijndaelmanaged aes

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

  1. 传入IV(不是自动生成的想法:: GenerateIV();)
  2. 传递密钥
  3. BlockSize为128(标准)
  4. 假设可以这样做,我的下一个问题是:

    1. keySize可以是256吗?我知道128是AES,但我们想使用256.我也不知道Java是否有256的提供者或者我是否需要使用BouncyCastle
    2. 什么是Padding? PKCS7?
    3. 我认为CiperMode是CBC
    4. 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;
          }
      

3 个答案:

答案 0 :(得分:2)

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

最近,作为Jeff Atwood has taught us in his blog,99%的开发人员不应该关注加密例程的低级细节(因为我们可能会搞砸它们)。

答案 1 :(得分:1)

根据您对此配置文件的使用情况,您可能希望使用外部程序。

例如,如果您希望在配置文件驻留在磁盘上时保护配置文件,但是在程序运行时您可以将其内容保存在内存中,则可以使用gpg加密文件,在程序启动时使用程序所需的用户提供的密码将其解密到内存中,然后在关闭程序时清除内存。[1]

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

答案 2 :(得分:0)

Q1:必须是128或者你必须使用BouncyCastle

Q2:是PKCS7

问题3:是CBC

如果你的问题没有死,我可以给你一些例子c#和java