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 07 Python
九步学会Python装饰器
May 09 Python
Python3实现从文件中读取指定行的方法
May 22 Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 Python
Python实现感知机(PLA)算法
Dec 20 Python
Python简单实现socket信息发送与监听功能示例
Jan 03 Python
Python 函数基础知识汇总
Mar 09 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
python创建文件备份的脚本
Sep 11 Python
python Qt5实现窗体跟踪鼠标移动
Dec 13 Python
用Python生成HTML表格的方法示例
Mar 06 Python
python 如何在list中找Topk的数值和索引
May 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
JavaScript toFixed() 方法
2010/04/15 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
javascript window.open打开新窗口后无法再次打开该窗口问题的解决方法
2014/04/12 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
Python使用wxPython实现计算器
2018/01/30 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
法国春天百货官网:Printemps.com
2020/06/29 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
总经理办公室主任岗位职责
2013/11/12 职场文书
网络营销策划方案
2014/06/04 职场文书
运动会方队口号
2014/06/07 职场文书
建筑安全生产责任书
2014/07/22 职场文书
学习经验交流会策划书
2015/11/02 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
Java异常体系非正常停止和分类
2022/06/14 Java/Android