c# - 使用 BouncyCaSTLe : AESEngine, AESFastEngine 或 AESLightEngine 进行 AES 加密?

标签 c# encryption aes bouncycastle encryption-symmetric

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

AES Encryption/Decryption with Bouncycastle Example in J2ME

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

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

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

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

希望我的问题不会造成太多困惑 ;-) 我非常感谢您给我的每一个答案、澄清或反馈。

迈克

最佳答案

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

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

  3. 没有。您将需要静脉注入(inject)。就盐而言,它通常与密码一起使用以生成实际的加密 key 和 IV,通常通过 PKBDF2。这超出了 AES 的范围,但它是一种典型的用法。


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

关于c# - 使用 BouncyCaSTLe : AESEngine, AESFastEngine 或 AESLightEngine 进行 AES 加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7278673/

相关文章:

c# - 将 C# 加密算法转换为 Ruby

c# - 在 WPF 中,如何只允许在 DataGrid 中选择一个单元格?

c# - ASP.NET MVC 5 页面在数据库调用时挂起

c - Libgcrypt 中的 AES CCM 加密和解密

java - AES 算法 Java/Java Script 中的 128 位 key 问题

android - 更换手机后如何恢复RSA key ?

java - 文件解密: IllegalBlockSizeException: last block incomplete in decryption

c# - 更改行终止符

c# - aspx 是否为 c# 静态变量提供特殊处理

使用 AES 加密/解密的 C# 库