go小程序登录解密encryptedData报错 ,但是写死的官方参数又可以解密
发布于 6 年前 作者 myi 2272 次浏览 来自 问答
package main

import(
"fmt"
  "crypto/aes"
  "crypto/cipher"
  "encoding/base64"
  "errors"
  "log"
  "encoding/json"
)



type  WXBizDataCrypt struct {
appId string
sessionKey string
}


type WaterMark struct {
TimeStamp string `json:"timestamp"`
  AppID string `json:"appid"`
}


type EncryptedDataUserInfo struct {
OpenID string `json:"openId"`
  NickName string `json:"nickName"`
  Gender int `json:"gender"`
  Language string `json:"language"`
  City string `json:"city"`
  Province string `json:"province"`
  Country string `json:"country"`
  AvatarURL string `json:"avatarUrl"`
  UnionID string `json:"unionId"`
  Watermark struct {
Timestamp int `json:"timestamp"`
     Appid string `json:"appid"`
  } `json:"watermark"`
}

func checkError(err error, id string) {
if err!= nil {
log.Fatal("Wrong position is " + id, err)
}
}


func (wx *WXBizDataCrypt) decrypt(encryptedData string, iv string) string {

// The sessionkey & encryptedData & iv are base64 encode
  // So we need to use base64 to decode it first
  sessionKey,err := base64.StdEncoding.DecodeString(wx.sessionKey)
checkError(err, "1")
encryptedDataByte,err := base64.StdEncoding.DecodeString(encryptedData)
checkError(err, "2")
ivByte,err := base64.StdEncoding.DecodeString(iv)
checkError(err, "3")

block,err := aes.NewCipher(sessionKey)
checkError(err, "4")

if len(encryptedDataByte) < aes.BlockSize {
err = errors.New("Ciphertext block size is too short!")
checkError(err, "5")
}

//The wechat biz data use mode CBC, which use block
  mode := cipher.NewCBCDecrypter(block, ivByte)
mode.CryptBlocks(encryptedDataByte, encryptedDataByte)

var dat EncryptedDataUserInfo
fmt.Println(string(encryptedDataByte))
json.Unmarshal(encryptedDataByte, &dat)
//fmt.Println(dat.UnionID)
   return dat.UnionID
/*openId,err := jsonparser.GetString(encryptedDataByte,"openId")
  checkError(err, "6")
  return openId*/
}


func main(){
ha := WXBizDataCrypt{
appId: "wx4f4bc4dec97d474b",
sessionKey : "tiihtNczf5v6AKRyjwEUhQ=="}
encryptedData := "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew=="
  iv := "r7BXXKkLb8qrSNn05n0qiA=="

/*  ha := WXBizDataCrypt{
      appId: "wxb8776b4df5c6ef6a",
      sessionKey : "ezcAawD6urUDuNetdZulOg=="}
   encryptedData := "BoG3R4blaQ5PwtODlnvbMowmmN37KI44bc3UPGa/dBpI4LelPkJ5C2vJ2xjEC6HTTT5VvyBKeQu6O+vBA7yc+D/0gSJRXhCUk0m1MoR1d2bqpxCQewnsAAj47f2ieo3B+bVI5Dayw06izx5EgMokZear7ZxT5VXAAoppTRximeht0MwZyH6XR9lakwPwrZfZPcd3hgGd81NPUdvsVyTHXiXnr4TRRPhw9z+cwTTy7HgVI6JmDjD1SgtyP2o4huVcc66UWzve5yAgCT2Q7DJvH8b+XZEFmRgYjlZfaspS1oK/kOEgbzJu+1m/MsZfMUGsh1TE9JkwrH6EjLhjuhhJNxAe7nO9mN7W8COs8wfvxWfhS3uwUjmg3dRiQpxIrmfewpcJQQr0mw68vl6KneXeY26LgmCyAzYPzUu946pYSJrhbLvEds4gMGJb7R4XipwMLZ4tcY1rgs4Md8noBAicWLUjNsNLNeoxvUOVEVvA1HcPo4fowg2G+ibGRiJP/AQORzigimbLAux1b/nRunx3KQ=="
   iv := "FYmK+E8nT6SLJUP9ytvSvQ=="*/


  res := ha.decrypt(encryptedData, iv)


fmt.Println(res)
}
回到顶部