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的即时标记项目练习笔记
Sep 18 Python
python实现数组插入新元素的方法
May 22 Python
python实现解数独程序代码
Apr 12 Python
TensorFlow实现卷积神经网络
May 24 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
python数据归一化及三种方法详解
Aug 06 Python
Python的条件锁与事件共享详解
Sep 12 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 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 - Html Transfer Code
2006/10/09 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
将酷狗krc歌词解析并转换为lrc歌词php源码
2014/06/20 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
php实现的操作excel类详解
2016/01/15 PHP
PHP微信开发之查询城市天气
2016/06/23 PHP
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
jQuery简单图表peity.js使用示例
2014/05/02 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
pyqt4教程之widget使用示例分享
2014/03/07 Python
python实现逻辑回归的方法示例
2017/05/02 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
用Python配平化学方程式的方法
2019/07/20 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
英文自我鉴定
2013/12/10 职场文书
餐饮部总监岗位职责范文
2014/02/13 职场文书
升学宴主持词
2014/04/02 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
春季运动会开幕词
2015/01/28 职场文书
第一节英语课开场白
2015/06/01 职场文书
少年雷锋观后感
2015/06/10 职场文书
我爱我班主题班会
2015/08/13 职场文书
mysql如何查询连续记录
2022/05/11 MySQL