简介
go 开发生产中常用的验签的包是 hmac 包
服务端一般验签流程是:发送方和接收方共享一个密钥 secret,然后发送方要发消息给接收方,会把原始信息(明文)和使用 secret 计算的 hmac 值(签名)一起发过去,接收方接收到消息之后,使用自己手中的 secret 把传过来的原始信息重新计算一下 hmac,看自己计算的 hmac 和发送过来的 hmac 如果匹配就认为验签成功
为什么不怕数据中途截获呢?因为如果别人中途截获了数据,知道原始信息和签名,但是无法反向解析,比如 mock 了签名没法求出原始信息,mock 了原始信息又因为不知道 secret 没法拿到签名,因此中途是安全的
验签代码
核心思想就是:双方有密钥,发送方把原始信息+签名发给接收方,接收方用密钥对原始信息重新加密,如果得到的签名和接收的一致,即验签通过
msg 常常是 req 中请求参数或者 header 组成的信息,相当于原文,secret 是密钥,通过 sha256 密钥 secret 加密原文拿到 newSign 这个新签名