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使用BeautifulSoup分页网页中超链接的方法
Apr 04 Python
python通过post提交数据的方法
May 06 Python
python实现计算倒数的方法
Jul 11 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
Python IDLE入门简介
Dec 08 Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 Python
Python解决走迷宫问题算法示例
Jul 27 Python
Python字典对象实现原理详解
Jul 01 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
了解一下python内建模块collections
Sep 07 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 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
2006/12/14 PHP
PHP获取服务器端信息的方法
2014/11/28 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
一个简单的js树形菜单
2011/12/09 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
Node.js+Express配置入门教程
2016/05/19 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
jQuery validata插件实现方法
2017/06/25 jQuery
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
vue返回上一页面时回到原先滚动的位置的方法
2018/12/20 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
2020/07/21 Javascript
[55:03]LGD vs EG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python打开文件并获取文件相关属性的方法
2015/04/23 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
英国空调、除湿机和通风设备排名第一:Air Con Centre
2019/02/25 全球购物
Jar包的作用是什么
2014/03/30 面试题
大学生村官工作感言
2014/01/10 职场文书
2015年度党员个人总结
2015/02/14 职场文书
工程质检员岗位职责
2015/04/08 职场文书
停水通知
2015/04/16 职场文书
人事任命通知书
2015/04/21 职场文书
老乡聚会通知
2015/04/23 职场文书
反邪教观后感
2015/06/11 职场文书
早恋主题班会
2015/08/14 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
Python实现提取PDF简历信息并存入Excel
2022/04/02 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang
Nginx如何配置根据路径转发详解
2022/07/23 Servers