Hachage

Les appels d'API ci-dessous permettent de hacher les mots de passe et autres secrets à l'aide de méthodes de cryptographie forte. Par exemple, s'il est nécessaire d'enregistrer en toute sécurité le mot de passe d'un utilisateur dans la base de données et de le vérifier ultérieurement, c'est l'API à utiliser.

Notez que Zato dispose d'une API de signature unique et de gestion des utilisateurs qui automatise l'authentification des utilisateurs, sans qu'aucune programmation ne soit nécessaire. La fonctionnalité ci-dessous est destinée à être utilisée dans les situations où l'API de signature unique et de gestion des utilisateurs doit être étendue avec des fonctions personnalisées. Sinon, l'API SSO et utilisateur est la plus pratique à utiliser.

En ce qui concerne l'implémentation, la fonction de dérivation de clé pour le hachage est PBKDF2-512. Les valeurs par défaut sont une taille de sel de 64 octets (512 bits) et 120 000 tours de hachage.

Hachage

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

# Zato
from zato.server.service import Service

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

        # Suppose there is a password to hash
        data = 'C61mBoPzpa2sA'

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

        # Hash it - the result can be saved to
        # some kind of storage in order to verify it later on
        hashed = self.crypto.hash_secret(data)

        # Log the resulting form
        self.logger.info('Hashed `%s`', hashed)
INFO - Data `C61mBoPzpa2sA`
INFO - Hashed `$pbkdf2-sha512$100000$3zvn3Hvv/V8L...`

Vérification

Pour vérifier une valeur hachée, il faut d'abord la charger à partir du stockage, puis la comparer aux données entrantes, par exemple au mot de passe que l'utilisateur a envoyé.

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

# Zato
from zato.server.service import Service

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

        # This function should load the hashed from, e.g. from a database
        hashed = load_hashed()

        # This is the data to be checked against the hashed value,
        # e.g. a user's password
        data = load_data()

        # Returns a boolean flag to indicate if verification succeeeded
        is_valid = self.crypto.verify_hash(data, hashed)
# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

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

        # Data to hash
        data = '1234567890'

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

        # Hash it
        hashed = self.crypto.hash_secret(data)

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

        # Verify the hash
        is_valid = self.crypto.verify_hash(data, hashed)

        # Will be True
        self.logger.info('Is correct `%s`', is_valid)

        # Verify the hash, using invalid input
        is_valid = self.crypto.verify_hash('invalid', hashed)

        # Will be False
        self.logger.info('Is correct `%s`', is_valid)
INFO - Is correct `True`
INFO - Is correct `False`

Informations connexes

Autres API de cryptographie: