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:truepour le chiffrement symétrique (défaut),falsepour 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.';
}