当前位置: 首页 > news >正文

golang 版 E签宝请求签名鉴权方式

E签宝 请求签名鉴权方式说明

package utilsimport ("crypto/hmac""crypto/md5""crypto/sha256""encoding/base64""fmt""github.com/gogf/gf/v2/util/gconv"
)type Sign struct {secret string
}func NewSign(secret string) *Sign {return &Sign{secret}
}// DoSign 计算签名
func (s Sign) DoSign(method, path, contentMD5, headers string) string {accept := "*/*"contentType := "application/json; charset=UTF-8"date := ""// 组合拼接待签名字符串canonicalString := fmt.Sprintf("%s\n%s\n%s\n%s\n%s\n", method, accept, contentMD5, contentType, date)if headers == "" {canonicalString = fmt.Sprintf("%s%s%s", canonicalString, headers, path)} else {canonicalString = fmt.Sprintf("%s%s\n%s", canonicalString, headers, path)}// 拼接字符串fmt.Println("拼接字符串:\n" + canonicalString + "\n")// 最后计算签名return s.doSignatureBase64(canonicalString, s.secret)
}// doSignatureBase64 计算签名(HmacSHA256)
func (s Sign) doSignatureBase64(message, secret string) string {mac := hmac.New(sha256.New, []byte(secret))_, _ = mac.Write([]byte(message))encode := mac.Sum(nil)return base64.StdEncoding.EncodeToString(encode)
}// DoContentMD5Base64 计算Body体的Content-MD5值
func (s Sign) DoContentMD5Base64(bodyData any) string {// 创建一个新的MD5 hasher对象md := md5.New()// 将byte数组写入hasher中计算MD5值md.Write([]byte(gconv.String(bodyData)))// 获取MD5值的byte数组表示(16 bytes)md5Bytes := md.Sum(nil)// 转base64return base64.StdEncoding.EncodeToString(md5Bytes)
}
http://www.lryc.cn/news/534707.html

相关文章:

  • QTreeView和QTableView单元格添加超链接
  • 【WB 深度学习实验管理】使用 PyTorch Lightning 实现高效的图像分类实验跟踪
  • SSM开发(十一) mybatis关联关系多表查询(嵌套查询,举例说明)
  • The Simulation技术浅析(六):机器学习
  • apache-poi导出excel数据
  • 唯一值校验的实现思路(续)
  • ffmpeg基本用法
  • MYSQL第四次
  • 联德胜w801开发板(六)手机蓝牙设置wifi名称和密码
  • Linux:库
  • 向量数据库简单对比
  • 大模型基本原理(四)——如何武装ChatGPT
  • 从零开始:使用Jenkins实现高效自动化部署
  • Spring Cloud工程完善
  • SSM仓库物品管理系统 附带详细运行指导视频
  • UI自动化测试中如何处理验证码?
  • 华为交换机堆叠配置
  • Vue 和 dhtmlx-gantt 实现图表构建动态多级甘特图效果 ,横坐标为动态刻度不是日期
  • collabora online+nextcloud+mariadb在线文档协助
  • “可通过HTTP获取远端WWW服务信息”漏洞修复
  • 【AI时代】-开发环境准备 之 Conda 创建 Python 环境 (含pip常用命令、jupyter 安装及汉化、自定义文档位置等配置)
  • [LeetCode] day19 454. 四数相加 II
  • LeetCodehot 力扣热题100 验证二叉搜索树
  • 四次挥手详解
  • Deepseek-v3 / Dify api接入飞书机器人go程序
  • 2025.2.9 每日学习记录2:技术报告写了一半+一点点读后感
  • qml ToolBar详解
  • 机器学习在癌症分子亚型分类中的应用
  • Ansible自动化部署K8s集群一 Ansible的基础使用实战
  • ZooKeeper Watcher 机制详解:从注册到回调的全过程