【golang】小程序登录敏感数据解密出来的数据乱码,不是正常json字符串
448 浏览2022年02月11日作者:User7186639865763643407

报错截图或相关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)]
}
最后一次编辑于 2022 年 02 月 11 日
1 条评论

相关文章

专题推荐

热门文章

热门问答