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 应用中使用 MongoDB的方法
Jan 05 Python
python 寻找优化使成本函数最小的最优解的方法
Dec 28 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python 读取文件并替换字段的实例
Jul 12 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
Python实现子类调用父类的初始化实例
Mar 12 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
基于Python的自媒体小助手---登录页面的实现代码
Jun 29 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
C3 线性化算法与 MRO之Python中的多继承
Oct 05 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
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
用XMLDOM和ADODB.Stream实现base64编码解码实现代码
2010/11/28 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
JavaScript学习笔记整理_setTimeout的应用
2016/09/19 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
详解webpack打包nodejs项目(前端代码)
2018/09/19 NodeJs
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
python生成式的send()方法(详解)
2017/05/08 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
python 绘制正态曲线的示例
2020/09/24 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
教师党员岗位承诺书
2014/05/29 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
营业员岗位职责
2015/02/11 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python
Python实现文字pdf转换图片pdf效果
2022/04/03 Python
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏