【问题标题】:AES-256 encryption with BouncyCastle Lightweight API使用 BouncyCastle 轻量级 API 的 AES-256 加密
【发布时间】:2012-03-04 12:56:00
【问题描述】:

我已经使用 Java 的内置加密库编写了一些(功能性)AES 加密代码,如下所示,但我想使用 256 位密钥。但是,我想这样做,而用户不必安装到无限强度加密策略文件。

现在,我听说使用 BouncyCastle 轻量级 API 可以让我做到这一点,但不幸的是,我在理解它时遇到了很多麻烦,并且正在努力寻找任何对我有帮助的文档。

这是我当前的代码,其中“内容”是要加密的字节数组:

KeyGenerator kgen = KeyGenerator.getInstance("AES");
int keySize = 128;
kgen.init(keySize);
SecretKey key = kgen.generateKey();
byte[] aesKey = key.getEncoded();
SecretKeySpec aesKeySpec = new SecretKeySpec(aesKey, "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, aesKeySpec);
byte[] encryptedContent = aesCipher.doFinal(content);

我将如何使用 BouncyCastle 轻量级 API 重新实现它?任何人都可以帮助我和/或指出一些简单示例代码的方向吗?

我也对任何其他允许 256 位密钥 AES 加密而无需用户安装无限强度策略文件的解决方案感兴趣。

非常感谢!

【问题讨论】:

  • 在此处查找 PaddedBufferedBlockCipher 示例。
  • 您正在使用不安全的 ECB 编码 "AES" 而不是 "AES/CBC/PKCS5Padding"),您似乎没有对 IV 做任何事情(如果您只加密单个纯文本,则可以,否则不会好的),并且由于某种原因,您正在将 SecretKey 转换为 SecretKeySpec,这似乎是错误的方式......

标签: java encryption aes bouncycastle


【解决方案1】:

这个问题和答案是一个有用的起点。

256bit AES/CBC/PKCS5Padding with Bouncy Castle

下一个最好的地方是 LW API 的测试代码,然后是 JCE Provider 代码。 JCE Provider 代码是 LW 库的包装器 - 因此,如果您想知道如何操作,这是查看它的最佳位置。

我所说的 JCE Provider 代码是指 BC 实现。

【讨论】:

  • 链接的 SO 答案是 JCE 与轻量级混合
猜你喜欢
  • 2016-10-05
  • 2015-08-22
  • 2016-03-16
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多