用 Bouncycastle jar 替换 JCE

2023-12-04

我必须摆脱 JCE jar,并应替换为用于 AES 加密和解密的充气城堡 jar。

当我将 JCE 策略 jar 替换为 AES 256 算法的 BC jar 时,出现无效密钥大小异常。但它与密钥大小 128 配合得很好。

在 AES 256 算法的情况下,我如何使用 BC jar。

Thanks.


该答案假设无法安装无限强度管辖加密文件使用提到的脚本。


密钥大小限制Cipher在里面Cipher类本身。它不可能(轻易)绕过它。

相反,您可以使用 Bouncy Castle 轻量级 API。轻量级 API 是轻量级的,因为 API 实现本身所需的类数量较多,但对您而言并不多。

例如(AES CBC 与 PKCS#7(PKCS#5 兼容)填充:

public class BouncyLightWeightCipherExample {

    private static final boolean FOR_DECRYPTION = false;

    public static void main(String[] args) throws NoSuchAlgorithmException, Exception {
        final byte[] keyData = new byte[256 / Byte.SIZE];
        final byte[] ivData = new byte[16];
        final byte[] testData = "owlstead".getBytes(UTF_8);

        // JCE creation
        final Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");

        // initialization
        c.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(keyData, "AES"), new IvParameterSpec(ivData));

        // and encryption
        final byte[] ciphertext = c.doFinal(testData);

        // Bouncy Castle creation
        final BlockCipher blockCipher = new AESFastEngine();
        final CBCBlockCipher withModeOfOperation = new CBCBlockCipher(blockCipher);
        final PaddedBufferedBlockCipher withPadding = new PaddedBufferedBlockCipher(withModeOfOperation);

        // initialization
        final ParametersWithIV keyAndIV = new ParametersWithIV(new KeyParameter(keyData), ivData);
        withPadding.init(FOR_DECRYPTION, keyAndIV);

        // and decryption
        int plaintextSize = withPadding.processBytes(ciphertext, 0, ciphertext.length, ciphertext, 0);
        plaintextSize += withPadding.doFinal(ciphertext, plaintextSize);
        final byte[] plaintext = Arrays.copyOf(ciphertext, plaintextSize);

        // there we are
        System.out.println(new String(plaintext, UTF_8));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 Bouncycastle jar 替换 JCE 的相关文章

随机推荐

  • 如何在 IBM MQ JMS 接口上使用 JMS 属性?

    我正在使用带有 MQ 6 0 2 的 MQ JMS 接口 似乎只支持预定义的属性 而不支持任意的属性 例如 我可以正确地getJMSCorrelationID getJMSPriority 等等 但是 当我在发件人上设置任意属性时 mess
  • 如何查看Google Play服务版本?

    在我的应用程序中 我需要检查 Google Play 服务版本 安装在用户设备中 是否可以 如果是的话 我该怎么做 我找到了简单的解决方案 int v getPackageManager getPackageInfo GoogleApiAv
  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • jQuery 获取 XML 中的匹配节点

    一点背景知识 我使用 XSLT 在页面上呈现一些 XML 但我们决定使其更具交互性 所以现在我正在执行 jQuery ajax 调用来返回 XML 并在 JavaScript 中解析它 我已经能够使用类似的代码从中提取特定节点 var qp
  • 为什么不能使用 Q_OBJECT 宏进行编译(链接)?

    我用 PyQt 制作了一个项目的原型并使其在那里工作 现在我尝试将其转换为 C 但遇到了一些问题 如果我不放入 Q OBJECT 宏 它会编译并运行 但如果我将其注释掉 则会出现以下错误 Undefined symbols vtable f
  • 将一组数据行绑定到 datagridview

    我尝试了以下代码 但 datagridview 中没有显示任何内容 有什么建议么 string strFilterOption dtcolnPurchaseProductExpProductNo 270 dgvProductExp Data
  • 当视图样式设置为详细信息时,如何在 Winforms ListView 中显示图标和文本?

    我只想有两列 例如 Item Value icon Gold 10 icon Silver 2 icon Iron 1 这可能吗 或者我需要为图标添加另一列吗 查看文档以了解SmallImageList of the ListView控制和
  • C语言中删除文件中的一个字符

    如何使用C程序从文件中删除几个字符 我找不到它的任何预定义函数 为了理解目的 我试图通过套接字发送一个文件 如果成功发送 N 个字节 我想从文件中删除这些字节 最后 该文件将为空 还有其他方法可以有效地做到这一点吗 谢谢 普拉迪普 如果它们
  • d3 单击创建圆并单击删除

    我试图单击一个圆圈将其删除 但单击画布将创建一个圆圈 我确实想从数据中实际删除圆圈及其对象 而不是仅仅使其透明 单击圆圈时调用该函数 function removeElement d d3 select this remove 通过单击圆圈
  • 有什么方法可以获取 Firebase Auth 用户 UID 吗?

    我希望通过 Node JS 或 Javascript API 从 Firebase 获取身份验证用户 Auth Users UID 我附上了它的屏幕截图 以便您了解我在寻找什么 希望你们能帮我解决这个问题 Firebase 3 中的身份验证
  • 如何在 iPhone 上旋转 Quartz 绘制的文本

    I want to draw some texts using Quartz Now the app draws but I want it to show as 0123456789 Is there any way to show it
  • .NET TIFF 文件:无需第三方库即可将 RGB 转换为 CMYK?

    继续我之前的问题 是否以及如何可以基于 RGBTIFF文件并使用标准 NET 3 5 功能将其转换为 CMYK 这可能吗 实际上有一种方法使用 System Windows Media Imaging 命名空间 目前似乎只适用于 TIFF
  • 将“const wchar_t *”转换为“unsigned char *”

    在 C 中 是否可以将 const wchar t 转换为 unsigned char 我怎样才能做到这一点 wstring dirName unsigned char dirNameA unsigned char dirName c st
  • 在没有 refspec 参数的情况下运行 git push、pull 和 fetch

    来自 Loeliger 2ed 的 Git 版本控制 如果您根本不指定 refspec 会怎样 git push命令 如何 Git 知道要做什么或将数据发送到哪里吗 首先 如果没有给命令明确的远程 Git 会假设 你想使用原点 没有参考规范
  • 如何创建 UI 设计器实用程序?

    我需要创建一个实用程序 用户可以在其中创建自己的数据输入屏幕 用户应该能够拖放普通的 UI 控件 TextBox RadioButton CheckBox ListBox ComboBox and Image 到任何容器并根据需要进行排列
  • kable 显示 html 代码而不是 html 表格

    我试图使用 kable 生成一张漂亮的表格 然而 kable 只是返回了 html 代码 而不是 r 笔记本中的表格本身 R 版本 3 5 0 Mac 上的 R 版本 1 1 453 Test 1 r library knitr dt lt
  • 在 PHP 中使用命名空间 URI 生成 XML

    如何使用 DOM 通过 php 制作这个 简单 的 xml 欢迎提供完整代码
  • Database.Logger.Level 枚举值在版本 11.0.0 中不可访问

    6 月 30 日更新 此问题已在版本 11 0 2 中得到纠正 在 Firebase 版本 11 0 0 之前 枚举值数据库 记录器 级别可以直接访问 使用 10 2 6 编译的示例是 FirebaseDatabase getInstanc
  • 构建 Storm 时 Zookeeper 出现 ClassNotFoundException

    我是 java 和 Storm 的新手 所以请原谅任何明显的错误 我正在尝试使用水槽连接器进行风暴 但它因以下错误而崩溃 java lang reflect InvocationTargetException at sun reflect
  • 用 Bouncycastle jar 替换 JCE

    我必须摆脱 JCE jar 并应替换为用于 AES 加密和解密的充气城堡 jar 当我将 JCE 策略 jar 替换为 AES 256 算法的 BC jar 时 出现无效密钥大小异常 但它与密钥大小 128 配合得很好 在 AES 256