小程序java获取用户信息 aes解密一直报错 last block incomplete in decryption

ddz15898566594 2018-03-02 12:41:04
内容我暂时就没贴了,都是照着网上大神写的,但是一直搞不成,总是报错,看了很多帖子,但是发现java解密都差不多那样,报错也一直没变,搞了四五个小时,一直爆这一个错误,都要疯了,求个大神帮帮忙
...全文
8235 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ludaima 2018-12-18
  • 打赏
  • 举报
回复 1
我也是遇到这个问题,,逼疯自己两天。
我最后找到问题是因为小程序传encryptedData到服务器时,encryptedData中的加号在传输到服务器时都变成了空格,导致解码失败。
解决方法是传encryptedData时,把“+”用“%2B”替换。或者在服务器替换空格为加号
stacksoverflow 2018-06-26
  • 打赏
  • 举报
回复 1
参考
https://stackoverflow.com/questions/13261252/javax-crypto-illegalblocksizeexception-last-block-incomplete-in-decryption-de
white_ice 2018-06-26
  • 打赏
  • 举报
回复
我也是这个问题,不过我最后发现我是用get请求才会报这个错,最后改成post请求就好了,get请求可能请求参数超过浏览器限制了
0x12 2018-05-15
  • 打赏
  • 举报
回复
解密函数有问题

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");   
            SecretKeySpec key_spec = new SecretKeySpec(Base64.decodeBase64(this.sessionKey), "AES");  
            IvParameterSpec wiv = new IvParameterSpec(Base64.decodeBase64(iv));  
            cipher.init(Cipher.DECRYPT_MODE, key_spec, wiv);   
            // 使用BASE64对密文进行解码  
            byte[] encrypted = Base64.decodeBase64(content);   
            // 解密  
            byte[] original = cipher.doFinal(encrypted);    
            byte[] bytes = PKCS7Encoder.decode(original);   
源码在https://download.csdn.net/download/lygzscnt12/10416215[code=java]
迷途的码农 2018-04-13
  • 打赏
  • 举报
回复
有jar包没有加进来,少包,Unknown Source,信息太少了,这个只是猜测
weixin_41992785 2018-04-13
  • 打赏
  • 举报
回复
解密encryptedData时 javax.crypto.IllegalBlockSizeException: last block incomplete in decryption at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source) 无限报这个错,base64类也换了好几个也没有解决问题
资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 在 Android 开发中,数据安全至关重要,尤其是涉及敏感信息的存储与传输。DES(数据加密标准)是一种常见的对称加密算法,其简单高效,但安全性较低,因为其密钥长度仅为 56 位。在 Android 中使用 DES 进行加密和解密时,开发者常会遇到一个异常:javax.crypto.IllegalBlockSizeException: last block incomplete in decryption。此异常通常出现在解密阶段,原因是输入数据块大小与 DES 的块大小不匹配。DES 要求输入数据必须是 8 字节的倍数,否则解密时会抛出该异常。在 Javajavax.crypto.Cipher 类中,若未正确处理这一问题,就会导致错误。要解决此问题,开发者需确保加密和解密过程中数据被正确填充至 8 字节的倍数。Java 的 Cipher 类提供了 doFinal() 方法,用于处理最后一块可能不足 8 字节的数据。加密前,可使用 Cipher.PAD_PKCS5 或 Cipher.PAD_ISO7816 进行填充,解密后则需移除这些填充。 以下是一个简单的 DESUtil.java 示例,展示如何在 Android 中实现 DES 加密和解密: 此示例中使用了 ECB(电子密码本)模式,这是最基础的 DES 模式,不使用初始化向量(IV)。然而,为提升安全性,通常建议使用 CBC(密码块链)或其他更安全的模式,并使用随机生成的 IV。同时,注意不要在多个会话中重复使用相同密钥,否则会降低加密安全性。 在实际应用中,还需注意以下几点:一是由于 DES 安全性不足,现在更推荐使用 AES(高级加密标准),其密钥长度可选,安全性更高;二是为防止密钥泄露,可使用密钥派生函数(如 PB

51,406

社区成员

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

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