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实现Linux命令xxd -i功能
Mar 06 Python
多版本Python共存的配置方法
May 22 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
Django框架模板的使用方法示例
May 25 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
python画图的函数用法以及技巧
Jun 28 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
python sorted函数原理解析及练习
Feb 10 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Python WebSocket长连接心跳与短连接的示例
Nov 24 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 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
php猴子选大王问题解决方法
2015/05/12 PHP
php创建无限级树型菜单
2015/11/05 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
JS防止用户多次提交的简单代码
2013/08/01 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
python的即时标记项目练习笔记
2014/09/18 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
python实现简单井字棋小游戏
2020/03/05 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
分公司经理岗位职责
2013/11/11 职场文书
有个性的自我评价范文
2013/11/15 职场文书
记者岗位职责
2014/01/06 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
秋冬农业生产标语
2014/10/09 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
教师年终个人总结
2015/02/11 职场文书
龙猫观后感
2015/06/09 职场文书
走进科学观后感
2015/06/18 职场文书