想要使用 32 字节的 AES 256 CBC,但它显示 java.security.InvalidAlgorithmParameterException

2024-04-06

我正在使用 AES 256 CBC。我有 32 字节的 IV。但是当我运行它时,它显示一个异常:

Exception in thread "main" java.lang.RuntimeException: java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long
    at com.abc.aes265cbc.AESUtil.decrypt(AESUtil.java:50)
    at com.abc.aes265cbc.Security.main(Security.java:48)
Caused by: java.security.InvalidAlgorithmParameterException: Wrong IV length: must be 16 bytes long
    at com.sun.crypto.provider.CipherCore.init(CipherCore.java:430)
    at com.sun.crypto.provider.AESCipher.engineInit(AESCipher.java:217)
    at javax.crypto.Cipher.implInit(Cipher.java:790)
    at javax.crypto.Cipher.chooseProvider(Cipher.java:848)
    at javax.crypto.Cipher.init(Cipher.java:1347)
    at javax.crypto.Cipher.init(Cipher.java:1281)
    at com.abc.aes265cbc.AESUtil.decrypt(AESUtil.java:47)
    ... 1 more

我不知道如何解决这个问题。我搜索过,但不知道如何解决这个问题。我是第一次尝试安全概念。 我的 AES 256 CBC 代码是:

 public static void setENCRYPTION_IV(String ENCRYPTION_IV) {
        AESUtil.ENCRYPTION_IV  =   ENCRYPTION_IV;
    }

    public static void setENCRYPTION_KEY(String ENCRYPTION_KEY) {
        AESUtil.ENCRYPTION_KEY  =   ENCRYPTION_KEY;
    }



    public static String encrypt(String src) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, makeKey(), makeIv());
            return Base64.encodeBytes(cipher.doFinal(src.getBytes()));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static String decrypt(String src) {
        String decrypted = "";
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, makeKey(), makeIv());
            decrypted = new String(cipher.doFinal(Base64.decode(src)));
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return decrypted;
    }

    static AlgorithmParameterSpec makeIv() {
        try {
            return new IvParameterSpec(ENCRYPTION_IV.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return null;
    }

    static Key makeKey() {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] key = md.digest(ENCRYPTION_KEY.getBytes("UTF-8"));
            return new SecretKeySpec(key, "AES");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return null;
    }

你能帮助我,通过改变这段代码中的内容,我将能够使用 32 字节的 IV。 提前致谢

编辑: 我的主要函数调用此函数:

 AESUtil.setENCRYPTION_KEY("96161d7958c29a943a6537901ff0e913efaad15bd5e7c566f047412179504ffb");

    AESUtil.setENCRYPTION_IV("d41361ed2399251f535e65f84a8f1c57");
    String decrypted = AESUtil.decrypt(new String(sw0SrUIKe0DmS7sRd9+XMgtYg+BUiAfiOsdMw/Lo2RA=));   // AES Decrypt

无论密钥长度是 256、192 还是 128 位,AES 算法的块大小都是 128 位。

当对称密码模式需要IV时,IV的长度必须等于密码的块大小。因此,您必须始终将 128 位(16 字节)的 IV 与 AES 结合使用。

无法将 32 字节 IV 与 AES 一起使用。

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

想要使用 32 字节的 AES 256 CBC,但它显示 java.security.InvalidAlgorithmParameterException 的相关文章

  • Maven 2:如何将当前项目版本打包在WAR文件中?

    我正在使用 Maven 2 构建我的 Java 项目 并且正在寻找一种向用户呈现 pom xml 当前版本号的方法 例如使用 Servlet 或 JSP 据我所知 最好的方法是 Maven 将版本号作为文本文件打包到 WAR 中 这使我能够
  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • 手动编辑 Jar 以更改包名称

    我有一个来自外部源的 jar 文件 jar 中的所有类都位于 com xyz 包中 我想将所有类移动到 com xyzold 包中 这是否像解压缩 jar 将 xzy 文件夹重命名为 xyzold 并重新压缩它一样简单 或者我还需要修改每个
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 防止 Spring Boot 注册 Spring Security 过滤器之一

    我想禁用安全链中的 Spring Security 过滤器之一 我已经看到了防止 Spring Boot 注册 servlet 过滤器 https stackoverflow com questions 28421966 prevent s
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • JFace ColumnWeigthData 导致父级增长

    我有一个 Eclipse RCP 应用程序 并且想要在TableViewer using ColumnWeigthData as ColumnLayoutData 问题是父表单 ScrolledForm在示例代码中 每当我布局表格时都会增加
  • 如何导入 org.apache.commons.lang3.ArrayUtils;进入 Eclipse [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我如何导入 org apache commons lang3 ArrayUtils 将库添加到 Ecl
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • Jenkins 的代码覆盖率 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将 Observable>> 转换为 Observable>

    我陷入了如何将以下可观察类型转换 转换为我的目标类型的困境 我有以下类型的可观察值 Observable
  • 当您在数组列表上调用remove(object o)时,它如何比较对象?

    当您在 java 中的数组列表上调用remove object o 时 它如何比较对象以找到要删除的正确对象 它使用指针吗 或者它使用 Comparable 接口来比较对象吗 ArrayList remove 依赖于对象的实现Equal方法
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • 使用 secp256r1 曲线和 SHA256 算法生成 ECDSA 签名 - BouncyCastle

    我正在尝试使用带有 secp256r1 曲线 P256 的 ECDSA 和用于消息哈希的 SHA256 算法生成签名 我也在使用 Bouncy Castle 库 下面的代码 public class MyTest param args pu
  • 为什么应该首选 Java 类的接口?

    PMD https pmd github io 将举报以下违规行为 ArrayList list new ArrayList 违规行为是 避免使用 ArrayList 等实现类型 而是使用接口 以下行将纠正违规行为 List list ne
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个

随机推荐

  • python 中处理 Excel 文件的最佳库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个很大的Excel 里面有很多工作表和工作表内相互链接的公式 我需要使用代码在一张纸中填充输入 并
  • NSTableView 排序

    我在 NSTableView 中有两列作为名称和薪水 有 5 10 个值 我想在单击两个列的标题后对这些列进行排序 互联网上有很多数据 但我无法使用这些数据 请帮我在可可中做到这一点 预先感谢并感谢任何帮助 每个表列都有一个方法setSor
  • 由 Javascript 填充的 QML ListView

    我刚刚意识到 根据一些 QML Bugreport ListView 缺少 JSON Delegate 所以我有两个选择 通过用Javascript或C 创建的模型来填充它 特别是我需要从预定义的 URL 下载 json 数据并将它们解析到
  • 如何在高图表中放置自定义标签

    我正在尝试执行官方 HighCharts 小提琴中的操作 http jsfiddle net gh get library pure highcharts highcharts tree master samples highcharts
  • 在 UISearchBar 中自动显示文本光标

    是否可以始终在 UISearchBar 中显示文本光标 不仅在触摸后 add this void viewDidAppear BOOL animated mySearchBar becomeFirstResponder super view
  • 正则表达式解析货币价值

    我需要在 AS3 中编写一个 RegExp 它将 Excel 格式的货币值解析为数字 例如 正则表达式 35 600 00 35600 并检查其格式是否正确 使用 作为千位分隔符 作为小数点 货币符号可以是任何符号 不仅仅是 并且可以位于开
  • 使用 IP 地址而不是域名发送电子邮件

    我试图避免通过 DNS 服务器将电子邮件发送到我托管的虚拟帐户之一上的地址 我知道我可以用方括号将 IP 地址括起来 但如何为服务器上的 虚拟 托管帐户指定邮箱用户名 换句话说 我在虚拟服务器上托管了多个域 所有域共享相同的 IP 地址 明
  • 如何更改列表框中单词的颜色

    我制作了一个带有文本框的表单 它接受一个单词并搜索一堆句子以查看其中是否有任何一个包含该单词 之后我必须显示这些句子并突出显示该单词 我的计划是制作一个列表框并添加里面的句子 我的问题是如何突出显示该单词 我想是通过更改颜色 以便可以区分它
  • Rubocop 仅检查修改的行

    我想在终端上仅针对我在 git 版本化项目中修改的行运行 rubocop 目前 通过谷歌搜索 我看到了适用于整个修改文件的脚本 I found this https gist github com skanev 9d4bec97d5a682
  • Google 网络字体与实际字体文件 - 适用于所有设备

    我正在寻找使用 Josefin Sans 它已列在 Google 网络字体中 我还有 eot svg ttf 和 woff 这意味着与文件完全兼容 据我所知 我的主要问题是 哪个更好 Google 字体加载速度更快吗 是不是更加兼容呢 或者
  • 在 Go 函数中返回本地数组的切片安全吗?

    如果我返回作为函数或方法的局部变量的数组切片 会发生什么情况 Go 是否将数组数据复制到创建的切片中make 容量与切片大小或数组大小匹配吗 func foo uint64 var tmp 100 uint64 end 0 for tmp
  • 无法使用可选参数推断泛型类型

    给定以下方法签名 为什么当显式命名参数时编译器无法自动推断类型 Visual Studio 2010 SP1 能够推断类型并且不会显示任何警告或错误 IEnumerable
  • 屏幕抓取:正则表达式还是 XQuery 表达式?

    我正在回答一些面试的测验问题 问题是关于我如何进行屏幕抓取 也就是说 假设您没有更好的结构化方法来直接查询信息 例如网络服务 则从网页中挑选内容 我的解决方案是使用XQuery表达 该表达式相当长 因为我需要的内容在 HTML 层次结构中相
  • 托管带有数据库的 asp.net 网站

    我在Microsoft Visual Studio 2010的帮助下创建了一个asp net网站 项目 各个项目的数据库是在Microsoft SQL Server Management Studio 2008的帮助下设计的 现在我想在互联
  • Azure 服务总线 1.1 无法启动

    服务总线网关未启动 首先 我尝试完全卸载所有Azure Fabric Service Bus类型的SDK和安装 我已经安装了两个Windows Azure Pack Service Bus 1 1 and Windows Azure Pac
  • Safari Web 扩展中后台服务工作人员发出 HTTP 请求期间出现 CORS 问题

    链接到 Xcode 项目的存储库来测试问题 测试 CORS 问题 https github com nick kadutskyi safari ext cors issue 这个扩展使用 Manifest v3 我有example com
  • 如何 grep 或搜索 OpenSSL 的 .jar 文件?

    我有一个 Android 应用程序正在使用一些 jar 文件 库 我的应用程序因 OpenSSL 漏洞而被拒绝 但找不到包含 OpenSSL 的 jar 文件 如何在我的 MAC 上搜索 Openssl 的 jar 文件 grep Open
  • 解决 Scala 中不明确的隐式转换

    有什么方法可以选择在下面使用 asJavaIterable 吗 我知道我可以拼出该特定的函数名称 但我想知道是否可以声明性地指定我想要的类型 我也很好奇为什么 asJavaIterable 不优先于 asJavaCollection sca
  • 通过通用代码将通知推送到各种设备

    我有一个要求 就是我必须将消息推送给使用 android 或 iphone 设备的各个用户 我知道将推送通知发送到 android 或 iphone 应用程序的各个流程 现在我的工作是我需要用java做服务器端实现 以便可以将消息发送到an
  • 想要使用 32 字节的 AES 256 CBC,但它显示 java.security.InvalidAlgorithmParameterException

    我正在使用 AES 256 CBC 我有 32 字节的 IV 但是当我运行它时 它显示一个异常 Exception in thread main java lang RuntimeException java security Invali