想要使用 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 的相关文章

随机推荐

  • 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