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实现支持目录FTP上传下载文件的方法
Jun 03 Python
简述Python中的进程、线程、协程
Mar 18 Python
Python对象类型及其运算方法(详解)
Jul 05 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
从头学Python之编写可执行的.py文件
Nov 28 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Django 缓存配置Redis使用详解
Jul 23 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
python 图像增强算法实现详解
Jan 24 Python
python编程实现清理微信重复缓存文件
Nov 01 Python
Python的property属性详细讲解
Apr 11 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
使用JSON实现数据的跨域传输的php代码
2011/12/20 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
详解jQuery选择器
2016/12/21 Javascript
浅谈Vue的基本应用
2016/12/27 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
基于jquery trigger函数无法触发a标签的两种解决方法
2018/01/06 jQuery
微信小程序实现工作时间段选择
2019/02/15 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
[55:35]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第二场 1月22日
2021/03/11 DOTA
带你了解python装饰器
2017/06/15 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python实现浪漫的烟花秀
2019/01/30 Python
通过cmd进入python的实例操作
2019/06/26 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
详解Python文件修改的两种方式
2019/08/22 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
用python进行视频剪辑
2020/11/02 Python
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
中学劳技课教师的自我评价
2014/02/05 职场文书
爱国演讲稿500字
2014/05/04 职场文书
合作意向协议书
2015/01/29 职场文书
车间质检员岗位职责
2015/04/08 职场文书
新闻通讯稿模板
2015/07/22 职场文书
python 逐步回归算法
2021/04/06 Python
Redis 异步机制
2022/05/15 Redis