为什么加密可以,解密却失败?

落然 2011-05-29 09:56:00
我使用AES对称加密算法加密,出现如下错误:
javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..)
at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..)
at javax.crypto.Cipher.doFinal(DashoA13*..)
at unit9.work.AES.Dec_AES(AES.java:61)
at unit9.work.CommunicationClient.run(CommunicationClient.java:155)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "Thread-2" java.lang.NullPointerException
at java.lang.String.<init>(String.java:515)
at unit9.work.CommunicationClient.run(CommunicationClient.java:156)
at java.lang.Thread.run(Thread.java:662)
删除代码中的解密部分,则可以输出解密结果。加上则不显示输出内容。
...全文
14830 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
落然 2011-05-30
  • 打赏
  • 举报
回复
好的,O(∩_∩)O谢谢~
阳明 to life 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 s_tangbao 的回复:]

还是非常感谢你,好喜欢你那个头像,看起来好好玩儿。
[/Quote]

呵呵,再仔细对比下,特别是长度问题,实在不行可以试试转成base64的字符串再传输到另外边解码,按道理的话哈,算法相同,对称密钥相同,中间数据相同不会出问题的
落然 2011-05-30
  • 打赏
  • 举报
回复
还是非常感谢你,好喜欢你那个头像,看起来好好玩儿。
阳明 to life 2011-05-30
  • 打赏
  • 举报
回复
传输前可以解密出来,传输后内容一样?长度一样?却解密不出来?
对称密钥也相同吧,这个我真不能理解了
落然 2011-05-29
  • 打赏
  • 举报
回复
但是还是不出来解密后结果的
落然 2011-05-29
  • 打赏
  • 举报
回复
不好意思,我刚刚又改了一下,发现传送是没有问题的,内容一样。我传输用的是DatagramPacket,传送比特数组
阳明 to life 2011-05-29
  • 打赏
  • 举报
回复
我看了API,doFinal都返回的byte[],你直接转成字符串?
阳明 to life 2011-05-29
  • 打赏
  • 举报
回复
首先先确定下。。。你加密完返回的就是这么个字符串是吧,然后加密了就直接传输过去的,没做其他操作?用什么方式传输的?
java桌面程序还是jsp
落然 2011-05-29
  • 打赏
  • 举报
回复
传送后,密文信息改变了
传输前:T9T&ԅN�m�QK
传输后:9T&詤N騧淨K抑z
是什么原因?
阳明 to life 2011-05-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 s_tangbao 的回复:]

我试了,未传输之前,进行解密,解出来的是正确的
[/Quote]
看看传输前后有啥区别,再找找原因,就这样听你的说明也还是不太了解具体哪个点出错了
落然 2011-05-29
  • 打赏
  • 举报
回复
我试了,未传输之前,进行解密,解出来的是正确的
阳明 to life 2011-05-29
  • 打赏
  • 举报
回复
我没有用过JAVA的cipher加密哈,但是道理都差不多
如果你加密完的是一个byte数组,你可以转成base64码传输,这样在传输到解密端先解码再通过cipher解密,这个过程不会丢失或增长字符
如果是加密完是一个字符串,你直接在加密完部分丢到解密看行不行,先别传输
落然 2011-05-29
  • 打赏
  • 举报
回复
我输入了16个1,还是出现刚刚那样的一堆错误。还可能是什么原因?
落然 2011-05-29
  • 打赏
  • 举报
回复
你的头像好好玩,是这样的,刪除解密部分能輸出加密后的结果,加密后就是传输了。再次掉用使用的是getData()获取数据。
阳明 to life 2011-05-29
  • 打赏
  • 举报
回复
。。。。你刪除解密部分能輸出解密结果?
提示是输入的密文长度必须是16的倍数,调试看看长度,你加密出来之后是否做过什么处理,传输过程中是否有字符增减

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧