Maison  >  Article  >  développement back-end  >  Python crée un outil de chiffrement/déchiffrement DingTalk

Python crée un outil de chiffrement/déchiffrement DingTalk

巴扎黑
巴扎黑original
2017-03-30 14:20:502265parcourir

Je n'ai pas écrit de blog technique depuis longtemps. 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 sont liés au développement de DingTalk. Le responsable ne fournit aucun SDK Python, je ne peux donc tout écrire que par moi-même. Je vais maintenant partager la partie "chiffrement/déchiffrement/signature" qui est relativement longue à mettre en œuvre, en espérant aider certaines personnes.

Pour le mécanisme spécifique de cryptage/déchiffrement, veuillez vous référer à la documentation officielle.

Pour installer cette extension dans votre projet, utilisez :

pip install dingtalk_crypto

Installation.

Comment utiliser, vous pouvez vous référer au code de test suivant :

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



Enfin, postez l'adresse du code source du projet , en espérant avoir quelques échanges .

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