Home  >  Article  >  Backend Development  >  Detailed introduction to making DingTalk encryption/decryption tool using Python

Detailed introduction to making DingTalk encryption/decryption tool using Python

高洛峰
高洛峰Original
2017-03-23 16:59:292021browse

It’s been a long time since I wrote a technical blog. I have been studying knowledge recently and haven’t summarized anything worth sharing, so I have stopped writing until now. The recent work has been handed over to the development of DingTalk, and the official has not provided any Python SDK, so I can only write it all by myself. Now I will share the "encryption/decryption/signature" part that is relatively time-consuming to implement. I hope it can help some people. You can refer to the specific mechanism of encryption/decryption. Official document.
To install
this extension in your project, you can use:

pip install dingtalk_crypto
To use it, you can refer to the following test code:

# -*- 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
.


-->

The above is the detailed content of Detailed introduction to making DingTalk encryption/decryption tool using Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn