Maison >développement back-end >Tutoriel Python >Introduction détaillée à la création d'un outil de chiffrement/déchiffrement DingTalk à l'aide de Python

Introduction détaillée à la création d'un outil de chiffrement/déchiffrement DingTalk à l'aide de Python

高洛峰
高洛峰original
2017-03-23 16:59:292124parcourir

Cela fait longtemps que je n'ai pas écrit de blog technique. J'ai étudié les connaissances récemment et je n'ai rien résumé qui mérite d'être partagé, j'ai donc arrêté d'écrire jusqu'à maintenant. Les travaux récents ont été confiés au développement de DingTalk, et le responsable ne fournit aucun Python SDK, donc je ne peux tout écrire que moi-même. Je vais maintenant partager la partie "chiffrement/déchiffrement/signature" qui est relativement longue à mettre en œuvre. J'espère que cela pourra aider certaines personnes. mécanisme de cryptage/déchiffrement. Document officiel.
Installez
cette extension dans votre projet, vous pouvez utiliser :

Méthode d'installation, vous pouvez vous référer au code de test suivant :
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
-->

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn