Aller au contenu

MEncoderDecoder

Présentation

MEncoderDecoder est une classe PHP qui fournit des méthodes simples pour le chiffrement et le déchiffrement de chaînes de caractères. Elle s'appuie sur l'extension OpenSSL de PHP pour fournir des fonctionnalités de chiffrement sécurisées, à la fois symétriques et asymétriques.

Fonctionnalités

  • Chiffrement symétrique avec AES-256-CBC
  • Chiffrement asymétrique avec des paires de clés RSA
  • Gestion simplifiée des opérations de chiffrement/déchiffrement
  • Génération sécurisée de vecteurs d'initialisation (IV)
  • Gestion des erreurs avec des exceptions personnalisées

Prérequis

  • Extension OpenSSL activée
  • Pour le chiffrement asymétrique : des paires de clés RSA valides

Assurez-vous que l'extension OpenSSL est installée et activée dans votre configuration PHP. Vous pouvez vérifier cela avec la commande suivante :

php -m | grep openssl

Si l'extension n'est pas activée, modifiez votre fichier php.ini pour décommenter ou ajouter la ligne :

extension=openssl

Utilisation

Chiffrement symétrique (AES-256-CBC)

Le chiffrement symétrique utilise la même clé pour le chiffrement et le déchiffrement.

use mlib\utils\crypto\MEncoderDecoder;
use mlib\utils\crypto\MEncoderDecoderException;

try {
    // Créer une instance avec une clé secrète
    $key = 'MaCléSecrèteTrèsLongueEtSécurisée123!';
    $encoder = new MEncoderDecoder($key);

    // Chiffrer un message
    $message = 'Ceci est un message confidentiel';
    $encrypted = $encoder->encode($message);
    echo "Message chiffré: " . $encrypted . "\n";

    // Déchiffrer le message
    $decrypted = $encoder->decode($encrypted);
    echo "Message déchiffré: " . $decrypted . "\n";

} catch (MEncoderDecoderException $e) {
    echo "Erreur de chiffrement: " . $e->getMessage() . "\n";
}

Chiffrement asymétrique (RSA)

Le chiffrement asymétrique utilise une paire de clés : une clé publique pour le chiffrement et une clé privée pour le déchiffrement.

Génération des clés

Générez d'abord une paire de clés avec OpenSSL :

# Générer une clé privée
openssl genrsa -out private_key.pem 2048

# Extraire la clé publique
openssl rsa -in private_key.pem -pubout -out public_key.pem

Utilisation avec MEncoderDecoder

use mlib\utils\crypto\MEncoderDecoder;
use mlib\utils\crypto\MEncoderDecoderException;

try {
    // Lire les clés depuis les fichiers
    $publicKey = file_get_contents('chemin/vers/public_key.pem');
    $privateKey = file_get_contents('chemin/vers/private_key.pem');

    // Créer une instance pour le chiffrement (avec la clé publique)
    $encoder = new MEncoderDecoder($publicKey, false);

    // Chiffrer un message (avec la clé publique)
    $message = 'Ceci est un message confidentiel';
    $encrypted = $encoder->encode($message);
    echo "Message chiffré: " . base64_encode($encrypted) . "\n";

    // Créer une instance pour le déchiffrement (avec la clé privée)
    $decoder = new MEncoderDecoder(null, false, $privateKey);

    // Déchiffrer le message (avec la clé privée)
    $decrypted = $decoder->decode($encrypted);
    echo "Message déchiffré: " . $decrypted . "\n";

} catch (MEncoderDecoderException $e) {
    echo "Erreur de chiffrement: " . $e->getMessage() . "\n";
}

Référence des méthodes

__construct($key = null, $symetricEncoding = true, $privateKey = null)

Constructeur de la classe MEncoderDecoder.

  • $key : Clé pour le chiffrement symétrique ou clé publique pour le chiffrement asymétrique
  • $symetricEncoding : true pour le chiffrement symétrique (défaut), false pour le chiffrement asymétrique
  • $privateKey : Clé privée pour le déchiffrement asymétrique

Lève une MEncoderDecoderException si l'extension OpenSSL n'est pas disponible ou si les paramètres sont invalides.

encode($string)

Chiffre une chaîne de caractères.

  • $string : La chaîne à chiffrer
  • Retourne : La chaîne chiffrée

Lève une MEncoderDecoderException en cas d'erreur de chiffrement.

decode($string)

Déchiffre une chaîne de caractères précédemment chiffrée.

  • $string : La chaîne à déchiffrer
  • Retourne : La chaîne déchiffrée

Lève une MEncoderDecoderException en cas d'erreur de déchiffrement ou si la clé privée est manquante pour le déchiffrement asymétrique.

Gestion des erreurs

Toutes les erreurs sont signalées en lançant des exceptions de type MEncoderDecoderException qui étendent la classe \Exception standard de PHP. Vous pouvez capturer ces exceptions pour gérer les erreurs de manière appropriée.

try {
    $encoder = new MEncoderDecoder('ma_clé');
    $encrypted = $encoder->encode('message');
    // ...
} catch (\mlib\utils\crypto\MEncoderDecoderException $e) {
    // Journaliser l'erreur
    error_log('Erreur de chiffrement: ' . $e->getMessage());

    // Afficher un message générique à l'utilisateur
    echo 'Une erreur est survenue. Veuillez réessayer plus tard.';
}