Golang 微信小程序加密数据解密算法实现

简介: Golang 微信小程序加密数据解密算法实现

Go 语言 微信小程序加密数据解密算法实现

代码实现


本实现参考官方PHP例程实现,Go代码实现如下:

func DecryptData (app_id, session_key, iv, encrypted_data string) (map[string]interface{}, error) {
  if len := strings.Count(session_key, "") - 1; len != 24 {
    return nil, errors.New("Invalid value session_key!")
  }
  aesKey, err := base64.StdEncoding.DecodeString(session_key)
  if err != nil {
    return nil, err
  }
  if len := strings.Count(iv, "") - 1; len != 24 {
    return nil, errors.New("Invalid value iv!")
  }
  ivKey, err := base64.StdEncoding.DecodeString(iv)
  if err != nil {
    return nil, err
  }
  decodeData, err := base64.StdEncoding.DecodeString(encrypted_data)
  if err != nil {
    return nil, err
  }
  dataBytes, err := AesDecrypt(decodeData, aesKey, ivKey)
  if err != nil {
    return nil, err
  }
  var result map [string] interface{}
  err = json.Unmarshal(dataBytes, &result)
  watermark := result["watermark"].(map[string]interface{})
  if watermark["appid"] != app_id {
    return nil, errors.New("Invalid appid data!")
  }
  return result, err
}

参考


AES解密算法实现参考:golang版微信小程序登录和ase解码微信公开数据,稍作修改,代码如下:

func AesDecrypt(crypted, key, iv []byte) ([]byte, error) {
  block, err := aes.NewCipher(key)
  if err != nil {
    return nil, err
  }
  blockMode := cipher.NewCBCDecrypter(block, iv)
  origData := make([]byte, len(crypted))
  blockMode.CryptBlocks(origData, crypted)
    // 去除填充
  length := len(origData)
  unp := int(origData[length-1])
  return origData[:(length - unp)], nil
}
目录
相关文章
|
1天前
|
小程序 JavaScript Java
微信小程序+SpringBoot接入后台服务,接口数据来自后端
这篇文章介绍了如何将微信小程序与SpringBoot后端服务进行数据交互,包括后端接口的编写、小程序获取接口数据的方法,以及数据在小程序中的展示。同时,还涉及到了使用Vue搭建后台管理系统,方便数据的查看和管理。
微信小程序+SpringBoot接入后台服务,接口数据来自后端
|
8天前
|
JavaScript 算法 数据安全/隐私保护
烯牛数据JS逆向:MD5数据加密?不存在的!
烯牛数据JS逆向:MD5数据加密?不存在的!
23 1
|
8天前
|
算法 JavaScript 前端开发
消息摘要算法:MD5加密
消息摘要算法:MD5加密
20 1
|
14天前
|
缓存 小程序 数据库
小程序页面之间(传值)传递数据的方法
小程序页面之间(传值)传递数据的方法
|
18天前
|
安全 数据安全/隐私保护 Python
|
4天前
|
监控 Serverless Go
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
Golang 开发函数计算问题之Go 语言中切片扩容时需要拷贝原数组中的数据如何解决
|
8天前
|
JavaScript 数据安全/隐私保护 Python
东方财富股票数据JS逆向:secids字段和AES加密实战
东方财富股票数据JS逆向:secids字段和AES加密实战
28 0
|
8天前
|
数据采集 JavaScript 前端开发
同花顺股票数据逆向:Cookie加密和Hook注入
同花顺股票数据逆向:Cookie加密和Hook注入
28 0
|
3月前
|
监控 算法 Go
Golang深入浅出之-Go语言中的服务熔断、降级与限流策略
【5月更文挑战第4天】本文探讨了分布式系统中保障稳定性的重要策略:服务熔断、降级和限流。服务熔断通过快速失败和暂停故障服务调用来保护系统;服务降级在压力大时提供有限功能以保持整体可用性;限流控制访问频率,防止过载。文中列举了常见问题、解决方案,并提供了Go语言实现示例。合理应用这些策略能增强系统韧性和可用性。
218 0