Maison développement back-end tutoriel php Explication détaillée de la façon dont PHP utilise mcrypt pour implémenter un exemple de code de cryptage et de déchiffrement

Explication détaillée de la façon dont PHP utilise mcrypt pour implémenter un exemple de code de cryptage et de déchiffrement

Jul 08, 2017 am 10:39 AM
mcrypt php 加密解密

PHP est livré avec un certain nombre de méthodes de cryptage. Nous examinons ici comment utiliser l'extension mcrypt. J'ai également besoin d'utiliser cette chose pour crypter la valeur du cookie de l'utilisateur au travail, et j'ai étudié cet aspect sérieusement.

1. Introduction

Mcrypt est une extension de PHP qui complète l'encapsulation des algorithmes de chiffrement couramment utilisés. En fait, cette extension est une encapsulation de la bibliothèque de classes standard mcrypt. mcrypt a complété un certain nombre d'algorithmes de chiffrement couramment utilisés, tels que DES, TripleDES, Blowfish (par défaut), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH. , TEA, RC2 et GOST et propose quatre modèles de chiffrement par blocs : CBC, OFB, CFB et ECB.

2. Installation et utilisation

Pour utiliser cette extension, vous devez d'abord installer la bibliothèque de classes standard mcrypt. Les méthodes de compilation et d'installation de cette extension sont les mêmes que celles des extensions PHP classiques, elles ne seront donc pas expliquées en détail.

3. Quatre modèles de cryptage par blocs

Mcrypt prend en charge quatre modèles de cryptage par blocs, une brève description est la suivante :

① (livre de codes électronique). ) Convient au chiffrement de petites quantités de données aléatoires, telles que le chiffrement des mots de passe de connexion des utilisateurs.

②. MCRYPT_MODE_CBC (chiffrement de blocs de chiffrement) convient aux types de fichiers importants avec un niveau de sécurité de cryptage élevé.

③. MCRYPT_MODE_CFB (retour de chiffrement) convient aux situations où chaque octet du flux de données doit être crypté.

④. MCRYPT_MODE_OFB (retour de sortie, en 8 bits) est compatible avec le mode CFB, mais plus sécurisé que le mode CFB. Le mode CFB entraînera la propagation des erreurs de chiffrement. Si un octet est erroné, tous les octets suivants le seront. Le mode OFB n'a pas ce problème. Cependant, ce mode n’est pas très sûr et n’est pas recommandé.

⑤. MCRYPT_MODE_NOFB (retour de sortie, en nbit) est compatible avec OFB et offre une sécurité plus élevée grâce à l'utilisation d'un algorithme d'opération de bloc.

⑥. MCRYPT_MODE_STREAM est un modèle supplémentaire fourni pour les algorithmes de chiffrement de flux tels que WAKE ou RC4.

NOFB et STREAM ne sont valides que lorsque le numéro de version de mycrypt est supérieur ou égal à libmcrypt-2.4.x. (En gros, tous sont désormais plus grands que cette version, et la dernière version majeure de libmcrypt a atteint 4)

4 Vérifiez les algorithmes et les modèles pris en charge

①. () Liste les modèles pris en charge par l'environnement actuel

mcrypt_list_algorithms() Liste les algorithmes pris en charge par l'environnement actuel

S'il est exécuté depuis la ligne de commande :

Le code est le suivant :

php -r "var_dump(mcrypt_list_modes()); var_dump(mcrypt_list_algorithms());"
Copier après la connexion

pour lister tous les résultats.

5. Comment utiliser

Exemple 1 :

Le code est le suivant :

<?php
$key = "this is a secret key";
$input = "Let us meet at 9 o&#39;clock at the secret place.";
$encrypted_data = mcrypt_ecb (MCRYPT_3DES, $key, $input, MCRYPT_ENCRYPT);
?>
Copier après la connexion

La manière la plus simple est comme dans l'exemple 1 Comme le montre, cette méthode indique que $input est chiffré à l'aide de l'algorithme 3DES et que la clé de chiffrement est $key. Cependant, la méthode d'appel direct n'est plus officiellement recommandée et il est également recommandé de le faire. n’utilisez pas cette méthode en développement. Cela ne signifie pas nécessairement que cette méthode ne fonctionnera plus. Lorsque vous appelez cette méthode sous php5, vous pouvez voir un message d'avertissement, demandant "Avertissement PHP : tentez d'utiliser un IV vide, ce qui n'est PAS recommandé".

L'utilisation officiellement recommandée est présentée dans l'exemple 2

Exemple 2 :

Le code est le suivant :

<?php
    $key = "this is a secret key";
    $input = "Let us meet at 9 o&#39;clock at the secret place.";
    // 打开mcrypt,或者mcrypt类型的资源对象,该对象使用ecb模式,使用3des作为加密算法。
    $td = mcrypt_module_open(&#39;tripledes&#39;, &#39;&#39;, &#39;ecb&#39;, &#39;&#39;);
    // 创建iv(初始化向量)
    $iv = mcrypt_create_iv (
mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    // 根据密钥和iv初始化$td,完成内存分配等初始化工作
    
mcrypt_generic_init($td, $key, $iv);
    // 进行加密
    $encrypted_data = mcrypt_generic($td, $input);
    // 反初始化$td,释放资源
    
mcrypt_generic_deinit($td);
    // 关闭资源对象,退出
     mcrypt_module_close($td);
?>
Copier après la connexion


Le processus ci-dessus termine le processus de cryptage des données. Sélectionnez d'abord l'algorithme de chiffrement et le mode de chiffrement pour créer l'objet ressource et l'IV de mcrypt, puis initialisez le tampon (mémoire) requis pour le chiffrement, libérez le tampon après le chiffrement et enfin fermez l'objet ressource.

Le processus de décryptage est fondamentalement le même que le cryptage. Remplacez simplement mcrypt_generic($td, $input) par mdecrypt_generic($td, $input). Bien entendu, pour un algorithme de chiffrement symétrique comme 3des, les clés utilisées pour le chiffrement et le déchiffrement doivent être exactement les mêmes.

6. À propos de IV

Tous les modèles ne nécessitent pas IV et OFB doivent avoir IV, tandis que CBC et EBC sont facultatifs. Pour le mode IV requis, les valeurs IV de cryptage et de déchiffrement doivent être exactement les mêmes. CBC et EBC n'ont pas cette exigence. Cela peut être identique ou différent, cela n'a pas d'importance.

7. Une classe simple de cryptage et de décryptage

Le code est le suivant :

class AMPCrypt {
    private static function getKey(){
        return md5(&#39;exampleKey&#39;);
     }
    public static function encrypt($value){
         $td = mcrypt_module_open(&#39;tripledes&#39;, &#39;&#39;, &#39;ecb&#39;, &#39;&#39;);
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
         $key = substr(self::getKey(), 0, 
mcrypt_enc_get_key_size($td));
         mcrypt_generic_init($td, $key, $iv);
         $ret = base64_encode(mcrypt_generic($td, $value));
         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);
        return $ret;
     }
    public static function dencrypt($value){
         $td = mcrypt_module_open(&#39;tripledes&#39;, &#39;&#39;, &#39;ecb&#39;, &#39;&#39;);
         $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM);
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         $key = substr(self::getKey(), 0, mcrypt_enc_get_key_size($td));
         mcrypt_generic_init($td, $key, $iv);
         $ret = trim(mdecrypt_generic($td, base64_decode($value))) ;
         mcrypt_generic_deinit($td);
         mcrypt_module_close($td);
        return $ret;
     }
}
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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Routage CakePHP Routage CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous allons apprendre les sujets suivants liés au routage ?

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

See all articles