Python制作钉钉加密/解密工具


Posted in Python onDecember 07, 2016

又是很久没有写技术博客了,盖因最近都在学习知识,也没有总结出什么值得分享的内容,所以一直停笔至今。最近的工作和钉钉的开发打上了交到,官方并没有提供任何Python的SDK,于是只能全部自己写。现在我将其中实现起来相对费时间的“加密/解密/签名”部分分享出来,希望能帮助到一些人。

加密/解密的具体机制,可以参考 官方文档 。

在你的项目中安装这个扩展,可以使用: pip install dingtalk_crypto 安装。

使用方法,可以参考下面的测试代码:

# -*- coding: utf-8 -*-

import json
from dingtalk_crypto import DingTalkCrypto

# 这个是钉钉官方给的测试数据
# @see https://open-doc.dingtalk.com/doc2/detail.htm?treeId=175&articleId=104945&docType=1#s14
encrypt_text = '1a3NBxmCFwkCJvfoQ7WhJHB+iX3qHPsc9JbaDznE1i03peOk1LaOQoRz3+nlyGNhwmwJ3vDMG' \
        '+OzrHMeiZI7gTRWVdUBmfxjZ8Ej23JVYa9VrYeJ5as7XM/ZpulX8NEQis44w53h1qAgnC3PRzM7Zc' \
        '/D6Ibr0rgUathB6zRHP8PYrfgnNOS9PhSBdHlegK+AGGanfwjXuQ9+0pZcy0w9lQ=='

crypto = DingTalkCrypto(
  '4g5j64qlyl3zvetqxz5jiocdr586fn2zvjpa8zls3ij',
  '123456',
  'suite4xxxxxxxxxxxxxxx'
)

signature = '5a65ceeef9aab2d149439f82dc191dd6c5cbe2c0'
timestamp = '1445827045067'
nonce = 'nEXhMP4r'


class TestCrypto:
  def test_decrypt(self):
    randstr, length, msg, suite_key = crypto.decrypt(encrypt_text)
    msg = json.loads(msg)

    assert msg['EventType'] == 'check_create_suite_url'
    assert msg['Random'] == 'LPIdSnlF'
    assert suite_key == 'suite4xxxxxxxxxxxxxxx'

  def test_encode(self):
    encrypt_msg = crypto.encrypt('hello world')
    randstr, length, msg, suite_key = crypto.decrypt(encrypt_msg)
    assert msg == 'hello world'

  def test_check_signature(self):
    assert crypto.check_signature(encrypt_text, timestamp, nonce, signature)

  def test_sign(self):
    msg = crypto.encrypt('hello world')
    actual_sig, actual_time, actual_nonce = crypto.sign(msg)
    assert True

最后,贴出项目的 源码地址 ,希望能一些交流。

Python 相关文章推荐
python实现二分查找算法
Sep 21 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
python 列表,数组和矩阵sum的用法及区别介绍
Jun 28 Python
python实现多人聊天室
Mar 31 Python
浅谈Python爬虫基本套路
Mar 25 Python
Python匿名函数及应用示例
Apr 09 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
python pygame实现挡板弹球游戏
Nov 25 Python
python 实现保存最新的三份文件,其余的都删掉
Dec 22 Python
Django实现前台上传并显示图片功能
May 29 Python
Python数据可视化之绘制柱状图和条形图
May 25 Python
详解Python 数据库 (sqlite3)应用
Dec 07 #Python
Python应用03 使用PyQT制作视频播放器实例
Dec 07 #Python
Python 实现一个颜色色值转换的小工具
Dec 06 #Python
python 线程的暂停, 恢复, 退出详解及实例
Dec 06 #Python
python 实现删除文件或文件夹实例详解
Dec 04 #Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 #Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 #Python
You might like
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
PHP判断是否为空的几个函数对比
2015/04/21 PHP
PHPCMS V9 添加二级导航的思路详解
2016/10/20 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
javascript定义函数的方法
2010/12/06 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
2013/05/24 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
2013/07/18 Javascript
js 删除数组的几种方法小结
2014/02/21 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
javascript模拟命名空间
2015/04/17 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
Element Collapse 折叠面板的使用方法
2020/07/26 Javascript
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
python读写csv文件方法详细总结
2019/07/05 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
python获取linux系统信息的三种方法
2020/10/14 Python
优秀中专生推荐信
2013/11/17 职场文书
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
法律进企业活动方案
2014/03/04 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang