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中的__init__和__new__
Mar 12 Python
使用wxpython实现的一个简单图片浏览器实例
Jul 10 Python
python使用分治法实现求解最大值的方法
May 12 Python
Python 元类实例解析
Apr 04 Python
python安装pywin32clipboard的操作方法
Jan 24 Python
Pandas的read_csv函数参数分析详解
Jul 02 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
Python基于Opencv来快速实现人脸识别过程详解(完整版)
Jul 11 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
Python自动化操作实现图例绘制
Jul 09 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
php 解压rar文件及zip文件的方法
2014/05/05 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
jquery对象和javascript对象即DOM对象相互转换
2014/08/07 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
微信小程序连续签到7天积分获得功能的示例代码
2020/08/20 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
PHP魔术方法__ISSET、__UNSET使用实例
2014/11/25 Python
Python实现二叉堆
2016/02/03 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
2019/07/04 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
Python requests接口测试实现代码
2020/09/08 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
JAVA代码查错题
2014/10/10 面试题
工商管理实习生自我鉴定范文
2013/12/18 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
协议书怎么写
2014/04/21 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
python入门之算法学习
2021/04/22 Python
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL