报错截图或相关BUG
【golang】小程序登录敏感数据解密出来的数据乱码,不是正常json字符串,令人奇怪的是在开发者工具上解密正常,在抖音体验版上使用则报错
正常:
{"nickName":"era-wang","avatarUrl":"https://p9-passport.byteacctimg.com/img/mosaic-legacy/3793/3114521287~120x256.image","gender":0,"city":"","province":"","country":"中国","language":"","openId":"c07b0101-2870-4573-b3f2-080c0af01483","unionId":"93da1507-0fab-49cc-a99f-0154cc915ae5","watermark":{"appid":"ttf8768ecb674f95d901","timestamp":1644488997}}
失败:
在此处粘贴截图
代码
type PlainData struct {
NickName string `json:"nickName"`
AvatarUrl string `json:"avatarUrl"`
Gender int `json:"gender"`
City string `json:"city"`
Province string `json:"province"`
Country string `json:"country"`
Language string `json:"language"`
OpenId string `json:"openId"`
UnionId string `json:"unionId"`
PhoneNumber string `json:"phoneNumber"`
PurePhoneNumber string `json:"purePhoneNumber"`
CountryCode string `json:"countryCode"`
Watermark struct {
Appid string `json:"appid"`
Timestamp int64 `json:"timestamp"`
} `json:"watermark"`
}
func Decrypt(sessionKey, encryptedData, iv, signature string) (*PlainData, error) {
src, _ := base64.StdEncoding.DecodeString(encryptedData)
_key, _ := base64.StdEncoding.DecodeString(sessionKey)
_iv, _ := base64.StdEncoding.DecodeString(iv)
block, _ := aes.NewCipher(_key)
mode := cipher.NewCBCDecrypter(block, _iv)
dst := make([]byte, len(src))
mode.CryptBlocks(dst, src)
fmt.Println(string(dst))
var userInfo PlainData
err := json.Unmarshal(PKCS5UnPadding(dst), &userInfo)
if err != nil {
return nil, err
}
return &userInfo, nil
}
//解密后的数据做一次Unpadding
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
unPadding := int(origData[length-1])
return origData[:(length - unPadding)]
}