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
}
目录
相关文章
|
3月前
|
机器学习/深度学习 算法 前端开发
别再用均值填充了!MICE算法教你正确处理缺失数据
MICE是一种基于迭代链式方程的缺失值插补方法,通过构建后验分布并生成多个完整数据集,有效量化不确定性。相比简单填补,MICE利用变量间复杂关系,提升插补准确性,适用于多变量关联、缺失率高的场景。本文结合PMM与线性回归,详解其机制并对比效果,验证其在统计推断中的优势。
1195 11
别再用均值填充了!MICE算法教你正确处理缺失数据
|
4月前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
294 1
|
4月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
414 0
|
3月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
173 0
|
4月前
|
存储 监控 算法
企业电脑监控系统中基于 Go 语言的跳表结构设备数据索引算法研究
本文介绍基于Go语言的跳表算法在企业电脑监控系统中的应用,通过多层索引结构将数据查询、插入、删除操作优化至O(log n),显著提升海量设备数据管理效率,解决传统链表查询延迟问题,实现高效设备状态定位与异常筛选。
144 3
|
4月前
|
算法 数据挖掘 定位技术
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
基于密度的聚类算法能够在含有噪声的数据集中识别出任意形状和大小的簇(Matlab代码实现)
112 1
|
4月前
|
机器学习/深度学习 数据采集 运维
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
|
5月前
|
机器学习/深度学习 传感器 边缘计算
【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)
【轴承故障诊断】基于融合鱼鹰和柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)
141 0
|
3月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
236 1