微信小程序获得iv, sessionkey 后传递给后端API,然后解密用户信息等敏感信息,有时解密时报错,说iv只有15个byte的问题(应该是16个)。
这是由于小程序段获得的iv是base64 encode之后的,其中可能含有“+”,+通过url参数直接传递,到服务端后,会被当作空格,空格base64.decode后会少一位,变成了15位。
要得到正确的iv,需要小程序传递前先转义,再传递才行。
1 | url = "xxx?iv=" + encodeURIComponent(iv) |
encryptedData也需要类似的处理。
这样才不会被认作空格,认作空格后,base64.decode会少一位。