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
}
目录
相关文章
|
2天前
|
算法 Java 数据处理
Java中MD5加密算法的实现
Java中MD5加密算法的实现
|
4天前
|
存储 算法 安全
加密算法概述:分类与常见算法
加密算法概述:分类与常见算法
|
4天前
|
Java BI C#
技术笔记:SM4加密算法实现Java和C#相互加密解密
技术笔记:SM4加密算法实现Java和C#相互加密解密
|
4天前
|
机器学习/深度学习 存储 算法
心得经验总结:微信红包随机算法转载
心得经验总结:微信红包随机算法转载
|
4天前
|
算法 安全 Java
技术笔记:MD5加密算法详解
技术笔记:MD5加密算法详解
|
4天前
|
机器学习/深度学习 算法 数据挖掘
聚类算法:揭秘数据背后的规律
聚类算法:揭秘数据背后的规律
|
5天前
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
|
5天前
|
算法 JavaScript 安全
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
一篇文章讲明白JavaScript_提交表单和MD5算法密码加密
|
12天前
|
机器学习/深度学习 算法 数据可视化
m基于PSO-LSTM粒子群优化长短记忆网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,应用PSO优化的LSTM模型提升了电力负荷预测效果。优化前预测波动大,优化后预测更稳定。PSO借鉴群体智能,寻找LSTM超参数(如学习率、隐藏层大小)的最优组合,以最小化误差。LSTM通过门控机制处理序列数据。代码显示了模型训练、预测及误差可视化过程。经过优化,模型性能得到改善。
29 6
|
12天前
|
机器学习/深度学习 人工智能 算法
【机器学习】模型、算法与数据—机器学习三要素
【机器学习】模型、算法与数据—机器学习三要素
116 0