最近从后台解密手机号时,有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,百思不得其解。
经过反复观察服务器日志,发现是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,用户也要点两次才能授权,谢谢。