Maison  >  Article  >  développement back-end  >  Comment chiffrer et décrypter en PHP ? Méthodes de cryptage et de décryptage PHP

Comment chiffrer et décrypter en PHP ? Méthodes de cryptage et de décryptage PHP

青灯夜游
青灯夜游avant
2018-11-22 13:54:328454parcourir

Le contenu de cet article est de présenter comment chiffrer et déchiffrer en PHP ? Méthodes de cryptage et de décryptage PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Afin d'assurer la sécurité des données de transmission sur le réseau, impliquant la transmission de données sensibles, il est préférable de pré-chiffrer les données avant de les transmettre sur le réseau, en même temps de s'assurer que. les données sont accessibles à l'autre extrémité. Décryptées et doivent être déchiffrées via une clé (clé publique ou clé privée). Les personnes sans clé (clé publique ou clé privée) ne peuvent pas déchiffrer même si elles obtiennent les données cryptées.

Cet article présente principalement l'algorithme de chiffrement AES en chiffrement symétrique ; l'algorithme de chiffrement RSA en chiffrement asymétrique. [Tutoriels vidéo associés recommandés : Tutoriel PHP]

1. Cryptage symétrique

Cryptage à l'aide d'un système de cryptographie à clé unique Méthode, la même clé peut être utilisée à la fois pour le cryptage et le déchiffrement des informations. Cette méthode de cryptage est appelée cryptage symétrique, également appelé cryptage à clé unique.

Les algorithmes couramment utilisés dans les algorithmes de chiffrement symétrique incluent : DES, 3DES, TDEA, Blowfish, RC2, RC4, RC5, IDEA, SKIPJACK, AES, etc.

Algorithme de cryptage AES

Advanced Encryption Standard (AES) en cryptographie, également connu sous le nom de méthode de cryptage Rijndael, est une norme américaine de cryptage par bloc A. adopté par le gouvernement fédéral. Cette norme est utilisée pour remplacer le DES original. Elle a été analysée par de nombreuses parties et est largement utilisée dans le monde. En 2006, Advanced Encryption Standard est devenu l’un des algorithmes les plus populaires pour le chiffrement à clé symétrique.

L'extension OpenSSL de PHP a implémenté l'algorithme de cryptage AES. Nous pouvons crypter et décrypter les données grâce aux méthodes fournies par l'extension OpenSSL. PHP a complètement supprimé le cryptage MCrypt dans la version 7.2, et le manuel PHP a été migré en 7.1. La page propose une alternative, qui consiste à utiliser OpenSSL pour remplacer MCrypt

Implémentation PHP AES (chiffrement, déchiffrement)

Code d'implémentation PHP :

class AES
{
    //设置AES秘钥
    private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥

    /**
     * 加密
     * @param string $str    要加密的数据
     * @return bool|string   加密后的数据
     */
    static public function encrypt($str) {

        $data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        $data = base64_encode($data);

        return $data;
    }

    /**
     * 解密
     * @param string $str    要解密的数据
     * @return string        解密后的数据
     */
    static public function decrypt($str) {

        $decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        return $decrypted;
    }
}

2. Cryptage asymétrique

L'algorithme de cryptage symétrique utilise la même clé secrète pour le cryptage et le déchiffrement ; l'algorithme de cryptage asymétrique nécessite deux clés pour crypter et déchiffrer. , les deux clés secrètes sont la clé publique (clé publique, dite clé publique) et la clé privée (clé privée, dite clé privée).
Les principaux algorithmes utilisés dans le chiffrement asymétrique sont : RSA, Elgamal, algorithme backpack, Rabin, D-H, ECC (algorithme de cryptographie à courbe elliptique), etc.

Algorithme de chiffrement RSA

RSA est actuellement l'algorithme de chiffrement à clé publique le plus influent, qui est basé sur un fait très simple de la théorie des nombres : la multiplication deux grands nombres premiers est facile, mais la factorisation de leur produit est extrêmement difficile, de sorte que le produit peut être exposé comme une clé de chiffrement, la clé publique et les deux grands nombres premiers combinés pour former la clé privée. La clé publique est accessible à tous et la clé privée vous appartient pour le déchiffrement.

Le décrypteur possède la clé privée et publie la clé publique générée par le calcul de la clé privée au chiffreur. Le chiffrement utilise la clé publique pour chiffrer et envoyer le texte chiffré au déchiffreur, qui utilise la clé privée pour déchiffrer le texte chiffré en texte brut.

Supposons que A veuille envoyer des informations à B, par exemple, déterminez d'abord les rôles : A est le chiffreur et B est le déchiffreur. Tout d'abord, B détermine aléatoirement une CLÉ, appelée clé secrète, et conserve cette CLÉ dans la machine B sans l'envoyer puis calcule une autre CLÉ à partir de cette CLÉ, appelée clé publique ; La propriété de cette clé publique est qu’il est quasiment impossible de calculer par elle-même la clé privée qui l’a générée. Ensuite, la clé publique est transmise à A via le réseau. Après que A ait reçu la clé publique, il utilise la clé publique pour chiffrer les informations et envoie le texte chiffré à B via le réseau. Enfin, B utilise la clé privée connue pour chiffrer les informations. texte chiffré. Ce qui précède est le flux de travail de l'algorithme RSA.

Le processus de mise en œuvre de l'algorithme est :

  1. Sélectionnez au hasard deux grands nombres premiers p et q, p n'est pas égal à q, et calculez N =pq.

  2. Selon la fonction d'Euler, le nombre d'entiers non supérieurs à N et relativement premiers à N est (p-1)(q-1).

  3. Choisissez un entier e qui est relativement premier avec (p-1)(q-1), et e est inférieur à (p-1)(q-1).

  4. Utilisez la formule suivante pour calculer d : d× e ≡ 1 (mod (p-1)(q-1)).

  5. Détruisez les enregistrements de p et q.

Dans le contenu ci-dessus, (N, e) est la clé publique et (N, d) est la clé privée.

Générer des clés privées et publiques

Générer un fichier de clé privée :

openssl genrsa -out rsa_private_key.pem 1024
Utilisez la clé privée pour générer une clé publique :

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
Les données peuvent être cryptées et déchiffrées via la clé publique et la clé privée générées :

Implémentation PHP RSA (cryptage, déchiffrement)

Code d'implémentation PHP ( Cryptage par clé publique et déchiffrement par clé privée) :

class RSA
{
    /**
     * @param string $str 要加密的数据
     * @param string $public_key 公钥
     * @return string
     */
    static public function encrypt($str, $public_key) {

        $encrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密

        $encrypted = base64_encode($encrypted);

        return $encrypted;
    }

    /**
     * 解密
     * @param string $str 要解密的数据
     * @param string $private_key 私钥
     * @return string
     */
    static public function decrypt($str, $private_key) {

        $decrypted = '';
        $pi_key =  openssl_pkey_get_private($private_key);
        openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密

        return $decrypted;
    }
}
Code d'implémentation PHP (cryptage par clé privée et déchiffrement par clé publique) :

class RSA
{
    //私钥加密 
    static public function encrypt($str, private_key) {

        $encrypted = '';
        $pi_key = openssl_pkey_get_private($private_key);
        openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密
        
        $encrypted = base64_encode($encrypted);
        
        return $encrypted;
    }
    //公钥解密
    static public function decrypt($str, $public_key) {

        $decrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密
        
        return $decrypted;
    }
}
Résumé : Ce qui précède est l'intégralité du contenu de ce article, j'espère qu'il sera utile à l'étude de chacun.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer