Cryptage et décryptage

L'API ci-dessous permet le cryptage et le décryptage symétrique en utilisant des clés secrètes configurables. Après le cryptage, les données renvoyées peuvent être utilisées en toute sécurité dans les URL.

Les clés sont générées lors de la création des serveurs avant qu'ils ne soient ajoutés à un cluster. L'accès aux clés doit être restreint car la connaissance des clés permet à quiconque de décrypter toute donnée précédemment cryptée. Par défaut, les clés sont conservées dans un fichier de configuration appelé secrets.conf mais il est possible de ne pas les stocker sur le disque - elles peuvent être lues depuis stdin, la ligne de commande ou les variables d'environnement.

S'il y a plus d'un serveur dans un cluster, tous doivent utiliser la même clé secrète.

Notez que la sortie du cryptage contient l'horodatage indiquant le moment où il a eu lieu. Comme un horodatage est inclus, chaque secret généré sera différent même pour les mêmes données d'entrée.

Sous le capot, le cryptage et le décryptage sont mis en œuvre en utilisant Fernet (AES-128, PKCS7, HMAC-SHA256).

# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class MyService(Service):
    def handle(self):

        # Data to encrypt - note that it must be a bytes object
        data = b'1234567890'

        # Log data to be manipulated
        self.logger.info('Data `%s`', data)

        # Encrypt it
        encrypted = self.crypto.encrypt(data)

        # Log the resulting form
        self.logger.info('Encrypted `%s`', encrypted)

        # Decrypt it back
        decrypted = self.crypto.decrypt(encrypted)

        # Log output - will be the same as original data
        self.logger.info('Decrypted `%s`', decrypted)
INFO - Data `1234567890`
INFO - Encrypted `gAAAAABaxzkr2Rizsro...`
INFO - Decrypted `1234567890`

Informations connexes

Autres API de cryptographie: