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判断文件和文件夹是否存在的方法
May 21 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
浅析Python 读取图像文件的性能对比
Mar 07 Python
Python时间和字符串转换操作实例分析
Mar 16 Python
Django 中自定义 Admin 样式与功能的实现方法
Jul 04 Python
详解Python 字符串相似性的几种度量方法
Aug 29 Python
python 字符串常用函数详解
Sep 11 Python
Python自动化测试中yaml文件读取操作
Aug 20 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+Mysql+zend的图文教程
2006/12/08 PHP
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
php中JSON的使用与转换
2015/01/14 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
php操作access数据库的方法详解
2017/02/22 PHP
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
跟老齐学Python之集合(set)
2014/09/24 Python
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python Tkinter版学生管理系统
2019/02/20 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
wxpython绘制圆角窗体
2019/11/18 Python
python图形用户接口实例详解
2019/12/16 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
2013/01/09 HTML / CSS
某科技软件测试面试题
2013/05/19 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
餐饮主管岗位职责
2013/12/10 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
党支部先进事迹材料
2014/12/24 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫