5

我想移植这个简单的 JAVA 示例...

J2ME 中使用 Bouncycastle 的 AES 加密/解密示例

...到 C# 并有以下两个 3 个问题:

  1. 据我了解,JAVA 示例使用 AESEngine 进行加密/解密操作。AESEngine 和 AESFastEngine 和 AESLightEngine 有什么区别?不幸的是,我不理解文档中提供的信息:http: //www.bouncycastle.org/docs/docs1.6/index.html

  2. 我想为我加密的每个文件使用一个新的加密密钥。我应该使用哪种分组密码操作模式:AES.CBC、AES.CFB、AES.ECB 或 AES.OFB http://www.bouncycastle.org/docs/docs1.6/index.html

  3. 我的假设是否正确,在我的情况下我不必使用 iv / salt(这意味着我必须使用静态 iv?)因为我使用 AES.KeyGen128() 生成密钥并且只使用一次?
    http://www.bouncycastle.org/docs/docs1.6/index.html

希望我的问题不会引起太多混乱 ;-) 我很感激你能给我的每一个答案、澄清或反馈。

麦克风

4

1 回答 1

5
  1. 我对文档的阅读表明 AESEngine、FastEngine 和 LightEngine 都在内存与速度之间进行了不同的权衡。您必须自己进行测试,以确定这些权衡是否与您的场景相关。

  2. 您将需要阅读各种 AES 模式。不同的模式具有不同的优势和属性,这可能或多或少适用或可取,具体取决于您的场景。因此,您的问题的答案是“视情况而定”。

  3. 不。您将需要静脉注射。至于盐,它通常与密码短语一起使用来生成实际的加密密钥和 IV,通常是通过 PKBDF2。这超出了 AES 的范围,但它是一种典型的用法。


最后你没有问,但是....为什么要将代码移植到 C# 中?.NET 内置了 AES 加密。您不需要移植任何东西,只需使用 .NET 基类库即可。只需确保您使用相同的密钥大小和模式,并确保您的密钥+iv 在每一侧都相同,并且 .NET BCL AES 类将与 J2ME 的 BouncyCastle 互操作。

于 2011-09-02T02:41:24.443 回答