javax.crypto.BadPaddingException
发布于 6 年前 作者 fangfu 9210 次浏览 来自 问答

最近从后台解密手机号时,有20%左右的概率发生Exception,同一个人在sessionKey一样的情况下,有时成功有时失败,例如:

第一次返回的密文、key、lv如下:

t8BGeUvYMOBjW3B1zwyd4cQtR2tCvBih+4Vn19NQdWooABcaTB+rx/C37A97caGgVoYO47CNf4iiOEO6g1aGbmMbEDVC/eNx0MScP3HidkSt1aYo6776aen4y6X3/bjUBPEE3qJNu2im/sl5pQo3dROC5MBDDV5fhhIl0780vG0Mq0MkFuL7kGMlF1HlEA5oexFFH4UvJkQ4cEZ6DxiCKg==  dr8ynaTVMz1VnYgLztZWuA==  89m6B40VN3px2MrMQYSEoA==

javax.crypto.BadPaddingException: pad block corrupted

at org.bouncycastle.jce.provider.JCEBlockCipher.engineDoFinal(Unknown Source)

at javax.crypto.Cipher.doFinal(Cipher.java:2165)

at com.qq.weixin.mp.aes.AES.decrypt(AES.java:38)

第二次返回的密文、key、lv如下:

omHdcLIWhtH+3LSSkdUiN0Hiz6KH5ybX7nEIbP+lu4SesxvqzP6ppfGgPmJ/KmNxCGDPxTajTX2MlL82JxlIDmWkd3YkM56rOMEjRgtBUogjkpZOn6wHb+b38RSeFCGE27hX8ouL7cjsRXLSVUQCJ4YmKkPXiFhB7TbSWG9kZowjj+sz64dhn524fT14B2lRJvMbhl5NEtWfpC9kyGcP/A==  dr8ynaTVMz1VnYgLztZWuA==  5TU46LYZeWZGQxDeAGug8Q==

第一次解密失败,第二次解密成功,同一个人同一个key

已确保用户处于login状态,上述的sessionKey也是一样的,但我看后台日志时不时蹦出这个exception,百思不得其解。

4 回复

请问这个问题后来有跟进吗?现在获取群聊id有时会出现解密问题不知道是不是这个原因。

showDecryptedInfo()是怎么用的?我在console里敲这个,无论授权之前还是之后都输出undefined

经过反复观察服务器日志,发现是iv与密文不匹配造成,上文中输出的参数是同一个人的,第一次失败,几秒后第二次点击则成功。

对应明文是:

{"phoneNumber":"15902237321","purePhoneNumber":"15902237321","countryCode":"86","watermark":{"timestamp":1511859580,"appid":"wx034468d82f0181a4"}}

第一次的密文:

ZwBaRtk/nnIda7/MtaNQIttN/yhdjE60zqNQnhUsy2wT4JqP63tjFh4B2fFpcWwNDiyzmPZadFAD

PYs1fYmeLpWymPgJYudPV8iZNCkGw1Ja43c97o7M2LbBB5CCxJwuOqX+pEjWTm1KZRkCgK+8SKi5

/Z832T/BE74RD+W0LMDlddBE/fvSt5+UtoyG6ax/w+XeoTs8yXxbM6N9Hy6Gwg==

第二次的密文:

omHdcLIWhtH+3LSSkdUiN0Hiz6KH5ybX7nEIbP+lu4SesxvqzP6ppfGgPmJ/KmNxCGDPxTajTX2M

lL82JxlIDmWkd3YkM56rOMEjRgtBUogjkpZOn6wHb+b38RSeFCGE27hX8ouL7cjsRXLSVUQCJ4Ym

KkPXiFhB7TbSWG9kZowjj+sz64dhn524fT14B2lRJvMbhl5NEtWfpC9kyGcP/A==

可以看出第一次服务器返回的密文或iv是不匹配的

由于session_key没有变化,而iv和密文都是腾讯服务器返回的,还希望工程师能在服务端检查一下,以免后台时不时的报excption,用户也要点两次才能授权,谢谢。

工具console输入showDecryptedInfo()可以打印当此请求的sessionkey和加密前明文,请先用这个功能自查一下吧。

回到顶部