当前位置: 首页 > news >正文

【】javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytes

问题描述

jdk版本:8

用DES进行加解密,其中转换模式为“DES/CBC/NoPadding”,要加密的明文为 “密码学浅析”,执行加密操作,报如下错误

Exception in thread "main" javax.crypto.IllegalBlockSizeException: Input length not multiple of 8 bytesat com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1109)at com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1053)at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)at com.sun.crypto.provider.DESCipher.engineDoFinal(DESCipher.java:314)at javax.crypto.Cipher.doFinal(Cipher.java:2164)at com.example.jcrypt.service.impl.DesDemoImpl.encryptEnhance(DesDemoImpl.java:88)at com.example.jcrypt.service.impl.DesDemoImpl.jdk8Des(DesDemoImpl.java:54)at com.example.jcrypt.service.impl.DesDemoImpl.main(DesDemoImpl.java:38)

原因分析

转换模式的填充模式是NoPadding,不填充,而明文为五个汉字,在utf8编码下为15个字节,不是8的倍数,所以报错。

解决方法

方法1:修改明文

把明文改成8字节倍数的数据,如:密码学浅析哈哈哈,这样在utf8编码下,其字节长度为24,是8的倍数,可以正常加密。

很显然,这种方法并不可取!!

方法2:修改填充模式

不要使用NoPadding的填充模式,可以使用PKCS5Padding的填充模式。

参考文章

https://blog.csdn.net/z19950712/article/details/108837487

http://www.lryc.cn/news/188327.html

相关文章:

  • 312.戳气球
  • get_trade_detail_data函数使用
  • 【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践应用
  • LeetCode862 和至少为k的最短子数组
  • 网卡bonding模式 - bond模式配置介绍
  • 做了个 chrome 插件实现 B 站视频截图功能,直接从当前视频帧无损复制
  • Docker linux 安装
  • windows部署django服务器
  • ChatGPT prompt汇总-个人使用-持续更新....
  • Vue实现简单的接口封装
  • 软件测试工具有什么作用?有哪些好用的测试工具推荐?
  • 写爬虫?前端er何必用python
  • 交通物流模型 | 基于交通图卷积长短时记忆网络的网络级交通流预测
  • web 基础和http 协议
  • Java常量与变量
  • 神经网络中卷积和池化的区别
  • RK3568平台开发系列讲解(驱动篇)RK3568 PWM详解
  • 禾匠商城系统 企业转账到零钱 修改成 商家转账到零钱
  • 点云从入门到精通技术详解100篇-基于激光点云的道路目标检测
  • 【Hello Algorithm】暴力递归到动态规划(一)
  • 凉鞋的 Godot 笔记 107. 脚本窗口文件系统窗口
  • 数据源作用以及spring配置数据源
  • Javaweb中的servlet中的消息体是什么?
  • 饥荒服务器阿里云租用价格表一年和一个月收费报价表
  • 前端 JS 经典:Math 常用方法汇总
  • MongoDB 笔记
  • Maven 项目文档
  • 浏览器中XPath的使用
  • js录制屏幕并输出视频
  • 华为OD机试 - 数组组成的最小数字(Java 2023 B卷 100分)