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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
Python 多进程和数据传递的理解
Oct 09 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
快速了解Python中的装饰器
Jan 11 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
Aug 12 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
pytorch 常用线性函数详解
Jan 15 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
django中websocket的具体使用
Jan 22 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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2016/12/02 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
js 操作符汇总
2014/11/08 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
python中update的基本使用方法详解
2019/07/17 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
CSS3 :not()选择器实现最后一行li去除某种css样式
2016/10/19 HTML / CSS
外科实习自我鉴定
2013/10/06 职场文书
车间机修工岗位职责
2014/02/28 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
放假通知
2015/04/14 职场文书
酒桌上的开场白
2015/06/01 职场文书
八年级物理教学反思
2016/02/19 职场文书
图神经网络GNN算法
2022/05/11 Python