Attention : Évitez de chiffrer les mots de passe en utilisant ces méthodes ; utilisez plutôt des algorithmes de hachage de mot de passe pour un stockage sécurisé des mots de passe.
Lorsque vous utilisez PHP 5.4 ou version ultérieure et que vous souhaitez la portabilité du code, utilisez une bibliothèque existante fournissant un cryptage authentifié. Les méthodes Openssl, telles que openssl_encrypt() et openssl_decrypt(), peuvent être utilisées une fois que vous avez sélectionné une méthode de cryptage.
Envisagez d'utiliser la norme de cryptage avancée (AES) dans Mode CTR pour le cryptage. Cette méthode offre le meilleur équilibre entre sécurité et performances. Consultez openssl_get_cipher_methods() pour une liste des méthodes prises en charge.
La classe PHP suivante fournit un wrapper de cryptage/déchiffrement simple utilisant OpenSSL :
class UnsafeCrypto { const METHOD = 'aes-256-ctr'; public static function encrypt($message, $key, $encode = false) { // ... if ($encode) { return base64_encode($nonce.$ciphertext); } return $nonce.$ciphertext; } public static function decrypt($message, $key, $encoded = false) { // ... $plaintext = openssl_decrypt( $ciphertext, self::METHOD, $key, OPENSSL_RAW_DATA, $nonce ); return $plaintext; } }
Pour une sécurité renforcée, implémentez l'authentification pour vérifier l'intégrité des données cryptées :
class SaferCrypto extends UnsafeCrypto { const HASH_ALGO = 'sha256'; public static function encrypt($message, $key, $encode = false) { // ... if ($encode) { return base64_encode($mac.$ciphertext); } // Prepend MAC to the ciphertext and return to caller return $mac.$ciphertext; } public static function decrypt($message, $key, $encoded = false) { // ... $calculated = hash_hmac( self::HASH_ALGO, $ciphertext, $authKey, true ); if (!self::hashEquals($mac, $calculated)) { throw new Exception('Encryption failure'); } // Pass to UnsafeCrypto::decrypt $plaintext = parent::decrypt($ciphertext, $encKey); return $plaintext; } }
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!