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 输出一个两行字符的变量
Feb 05 Python
python操作MySQL数据库具体方法
Oct 28 Python
paramiko模块安装和使用(远程登录服务器)
Jan 27 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
Django中的用户身份验证示例详解
Aug 07 Python
Python&&GDAL实现NDVI的计算方式
Jan 09 Python
python3中编码获取网页的实例方法
Nov 16 Python
python 获取计算机的网卡信息
Feb 18 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
教你如何使用Python Tkinter库制作记事本
Jun 10 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文件中bom的PHP代码
2012/03/13 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
2013/07/05 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
动态添加js事件实现代码
2009/03/12 Javascript
ExtJS扩展 垂直tabLayout实现代码
2009/06/21 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
vue组件间通信解析
2017/03/01 Javascript
原生js实现放大镜特效
2017/03/08 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
vue实现购物车的监听
2020/04/20 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
Python3实现连接SQLite数据库的方法
2014/08/23 Python
python中模块查找的原理与方法详解
2017/08/11 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
有创意的广告词
2014/03/18 职场文书
小学数学课后反思
2014/04/23 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
MySQL分布式恢复进阶
2022/07/23 MySQL