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通过post提交数据的方法
May 06 Python
Python中的random()方法的使用介绍
May 15 Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Python selenium如何设置等待时间
Sep 15 Python
python实现图片处理和特征提取详解
Nov 13 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
详谈Python3 操作系统与路径 模块(os / os.path / pathlib)
Apr 26 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
python怎么对数字进行过滤
Jul 05 Python
python单元测试之pytest的使用
Jun 07 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/06/22 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
2007/03/27 Javascript
用jquery设置按钮的disabled属性的实现代码
2010/11/28 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
Angular ng-repeat指令实例以及扩展部分
2016/12/26 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python字符串、整数、和浮点型数相互转换实例
2018/08/04 Python
如何利用python给图片添加半透明水印
2019/09/06 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python如何求数组连续最大和的示例代码
2020/02/04 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
毕业生精彩的自我评价分享
2013/10/06 职场文书
导游实习生自荐书
2014/01/28 职场文书
幼儿园元旦家长感言
2014/02/27 职场文书
大学生村官考核材料
2014/05/23 职场文书
四查四看整改措施
2014/09/19 职场文书
国庆横幅标语
2014/10/08 职场文书
售房协议书范本2014
2014/10/23 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
jQuery实现广告显示和隐藏动画
2021/07/04 jQuery
青岛市的收音机研制与生产
2022/04/07 无线电