Maison > développement back-end > tutoriel php > Comment puis-je implémenter un cryptage et une authentification bidirectionnels simples en PHP ?

Comment puis-je implémenter un cryptage et une authentification bidirectionnels simples en PHP ?

Mary-Kate Olsen
Libérer: 2024-12-24 02:10:13
original
217 Les gens l'ont consulté

How Can I Implement Simple Two-Way Encryption and Authentication in PHP?

Cryptage bidirectionnel le plus simple à l'aide de PHP

Contexte

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.

Cryptage de données portable en PHP

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.

Cryptage et dé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.

Wrapper de cryptage/décryptage simple utilisant OpenSSL

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;
    }
}
Copier après la connexion

Simple Authentication Wrapper

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;
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal