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代码调试的几种方法总结
Apr 15 Python
python开发中module模块用法实例分析
Nov 12 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
Python MD5加密实例详解
Aug 02 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
Flask框架Flask-Login用法分析
Jul 23 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
python Canny边缘检测算法的实现
Apr 24 Python
学python爬虫能做什么
Jul 29 Python
Python获取指定日期是"星期几"的6种方法
Mar 13 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
js 蒙版进度条(结合图片)
2010/03/10 Javascript
javascript 验证日期的函数
2010/03/18 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
js表单提交和submit提交的区别实例分析
2015/12/10 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python中的闭包用法实例详解
2015/05/05 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
pycharm设置注释颜色的方法
2018/05/23 Python
Python延时操作实现方法示例
2018/08/14 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
建筑文秘专业个人求职信范文
2013/12/28 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript