您现在的位置是: 首页 > 后端开发 > Python Python 钉钉加签 HmacSHA256 算法签名
Python 钉钉加签 HmacSHA256 算法签名
2020-05-20 【Python】 3781人已围观 7622次浏览
简介Python 钉钉加签 HmacSHA256 算法签名
在处理钉钉机器人发送消息时,涉及到了HmacSHA256算法签名,官方文档中,只提供了Java的签名计算代码示例
下面是Python的实现,虽然已经有很多类似的SDK集成了,具体的实现还是记录下,便于学习研究
import hmac
import hashlib
import base64
import re
import time
import urllib
# secret:密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串,例如:SECxxxxxxxx
secret = 'SECxxxxxxxx'
# timestamp:当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时
timestamp = int(round(time.time() * 1000))
# 加密,获取sign和timestamp
data = (str(timestamp) + '\n' + secret).encode('utf-8')
secret = secret.encode('utf-8') # 使用HmacSHA256算法计算签名,然后进行Base64 encode signature = base64.b64encode(hmac.new(secret, data, digestmod=hashlib.sha256).digest())
reg = re.compile(r"'(.*)'") signature = str(re.findall(reg, str(signature))[0]) # 最后进行urlEncode urlencode = urllib.parse.quote_plus(signature)
print(urlencode)
最后输出的就是最终的签名字符串,与官方文档中的Java签名代码示例输出结果相等(以上代码在本地Python 3.7.4下正常运行,其他版本需要自己测试下)
PS:在urlEncode时,默认情况下使用 quote_plus() 函数,它将空格被编码为 ‘+’ 字符,而“/”字符被编码为 %2F,它遵循GET请求(application/x-www-form-urlencoded)的标准
urllib.parse.quote(string, safe=’/’, encoding=None, errors=None)
可以作为备用的函数是 quote(),它将空格编码为 %20,字母,数字和 ‘_.-‘字符不被编码,而“/”字符被默认为安全字符不被编码。
很赞哦! (0)
点击排行
- Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR DISABLE You can't write or read against a disable instance
- Debian apt 使用国内镜像
- RocketMQ 出现 sendDefaultImpl call timeout 问题
- 类 BASE64Decoder 程序包 sun.misc 找不到符号
- SpringBoot @NotBlank 不生效问题
- 记一次 Mybatis-Plus 自动填充无效问题解决
- SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes
- nuxt 项目完整部署方案
站长推荐
猜你喜欢
- cmder vim方向键无法使用 解决方案
- Redis 提示 MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk 解决方案
- CentOS 安装 Docker
- 【Docker】unauthorized: incorrect username or password
- CentOS 7 安装 Golang 环境
- 迁移 Docker 目录
- mybatis中大于等于小于等于的写法
- Linux 修改默认的 ssh 22 端口
- Zookeeper 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
- SpringBoot 2.x 文件上传出现 The field file exceeds its maximum permitted size of 1048576 bytes