聊城做网站推广,十堰微网站建设电话,建微网站有什么好处,邢台168问题描述
jdk版本#xff1a;8
用DES进行加解密#xff0c;其中转换模式为“DES/CBC/NoPadding”#xff0c;要加密的明文为 “密码学浅析”#xff0c;执行加密操作#xff0c;报如下错误
Exception in thread main javax.crypto.IllegalBlockSizeExcepti…问题描述
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