


Qu'est-ce que l'extension de chiffrement PHP mcrypt ? Introduction détaillée à l'extension mcrypt
Dans le développement de projets spécifiques, nous pouvons parfois avoir besoin de chiffrer certaines données lors des interactions front-end et back-end. Par conséquent PHP fournit l'extension de chiffrement mcrypt pour implémenter le chiffrement et le déchiffrement des données. Examinons ensuite en détail l’introduction de l’extension mcrypt.
1. Installation de extension mcrypt
Dans les versions inférieures de PHP, elle doit être dans le fichier de configuration. php.ini Ajoutez explicitement une référence à l'extension et assurez-vous qu'il existe un fichier d'extension correspondant dans le répertoire de référence de l'extension ; dans les versions supérieures de PHP, l'extension mcrypt semble être activée par défaut sous Windows, et il n'est pas nécessaire de le faire. configurez-le dans le fichier de configuration php.ini , le fichier d'extension correspondant n'est pas visible dans le répertoire de référence de l'extension. Sous Linux, l'extension mcrypt.so correspondante doit être installée.
L'extension mcrypt prend en charge plusieurs algorithmes et modes de cryptage. Vous pouvez utiliser mcrypt_list_algorithms() et mcrypt_list_modes() pour afficher les algorithmes et modes de cryptage pris en charge.
II. Utilisation de l'extension mcrypt
Cryptage
1. Algorithme et mode de chiffrement ouverts
mcrypt_module_open('tripledes', '', ecb'', '') ;
Le premier paramètre est le nom de l'algorithme de chiffrement utilisé, correspondant à l'algorithme de chiffrement sorti par mcrypt_list_algorithms(); , correspondant Modes de chiffrement pris en charge affichés par mcrypt_list_modes().
2, Créer un vecteur d'initialisation
mcrypt_create_iv (mcrypt_enc_get_iv_size($td ), MCRYPT_RAND);
PS. Sous la plateforme Windows, le deuxième paramètre est fixé pour utiliser MCRYPT_RAND
3, Initialiser le tampon de chiffrement
mcrypt_generic_init($td, $key, $iv);
$td est Le descripteur de chiffrement renvoyé, $key est la clé de chiffrement, $iv est le vecteur d'initialisation
4、数据加密
$encrypted_data = mcrypt_generic($td, $data);
$td为加密描述符,$data为加密前的数据,数据加密函数返回加密后的字符串。
5、结束加密,执行清理工作
mcrypt_generic_deinit($td);
解密
1、打开解密算法和模式,同上,得到$td解密描述符
2、创建初始化向量,同上,得到$iv初始化向量
3、初始化解密缓冲区
mcrypt_generic_init($td,$key, $iv);
4、数据解密
$decrypted_data = mdecrypt_generic($td, $encrypted_data);
PS.$encrypted_data为解密前的密文,$decrypted_data为解密后的明文。
演示Demo:
<?php /* 打开加密算法和模式 */ $td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); /* 创建初始向量,并且检测密钥长度。 * Windows 平台请使用 MCRYPT_RAND。 */ $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_DEV_RANDOM); $ks = mcrypt_enc_get_key_size($td); /* 创建密钥 */ $key = substr(md5('very secret key'), 0, $ks); /* 初始化加密 */ mcrypt_generic_init($td, $key, $iv); /* 加密数据 */ $encrypted = mcrypt_generic($td, 'This is very important data'); /* 结束加密,执行清理工作 */ mcrypt_generic_deinit($td); /* 初始化解密模块 */ mcrypt_generic_init($td, $key, $iv); /* 解密数据 */ $decrypted = mdecrypt_generic($td, $encrypted); /* 结束解密,执行清理工作,并且关闭模块 */ mcrypt_generic_deinit($td); mcrypt_module_close($td); /* 显示文本 */ echo trim($decrypted) . "\n"; ?>
三、实现一个AES加密类
<?php /** * PHP AES加密解密类 * Created by PhpStorm. * User: ahao * Date: 2016/11/3 * Time: 0:03 */ class PubEncrypt{ public static $key = '123454536f667445454d537973576562'; // 默认的key /** * AES加密 * @param $data 明文 * @param null $key 加密密钥 * @return array|string */ public static function AesEncrypt($data, $key = null){ $data = trim($data); if($data == '') return ''; try{ if(!extension_loaded('mcrypt')) throw new Exception('当前PHP环境没有加载mcrypt扩展'); // 打开加密算法和模式 $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key = self::substr($key == null ? self::$key : $key, 0, mcrypt_enc_get_key_size($module)); $iv = substr(md5($key), 0, mcrypt_enc_get_iv_size($module)); // 初始化加密 mcrypt_generic_init($module, $key, $iv); // 加密数据 $encrypt = mcrypt_generic($module, $data); // 反初始化释放资源 mcrypt_generic_deinit($module); // 关闭资源对象退出 mcrypt_module_close($module); return array('status' => true, 'data' => base64_encode($encrypt)); }catch (Exception $e){ $error = $e->getMessage(); $data = array( 'status' => false, 'msg' => $error ); return $data; } } /** * AES解密 * @param $encrypted 密文 * @param null $key 解密密钥 * @return array|string */ public static function AesDecrypt($encrypted, $key = null){ $encrypted = trim($encrypted); if($encrypted == '') return ''; try{ if(!extension_loaded('mcrypt')) throw new Exception('当前PHP环境没有加载mcrypt扩展'); $encrypted = base64_decode($encrypted); $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $key = self::substr($key == null ? self::$key : $key, 0, mcrypt_enc_get_key_size($module)); $iv = substr(md5($key), 0, mcrypt_enc_get_iv_size($module)); mcrypt_generic_init($module, $key, $iv); $decrypted = mdecrypt_generic($module, $encrypted); mcrypt_generic_deinit($module); mcrypt_module_close($module); return array('status' => true, 'data' => rtrim($decrypted,"\0")); }catch (Exception $e){ $error = $e->getMessage(); $data = array( 'status' => false, 'msg' => $error ); return $data; } } /** * 截取字符串 * @param $string 被截取的字符串 * @param $start 起始位置 * @param $length 截取长度 * @return string 截取到的字符串 */ private static function substr($string, $start, $length) { return extension_loaded('mbstring') ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length); } }
PS.使用数据加密的好处:数据在前后台之间进行传输的是一个加密后的字符串,可以防止数据被爬虫抓包,避免敏感数据的泄露,也可以有效防止猜测出数据项对数据操作接口进行恶意请求
二、mcrypt扩展的使用
Cryptage
1 Algorithme et mode de cryptage ouverts
mcrypt_module_open('tripledes', '', ecb'', '');
Le premier paramètre est d'utiliser Le nom de l'algorithme de chiffrement correspond à l'algorithme de chiffrement sorti par mcrypt_list_algorithms(); le troisième paramètre correspond au mode de chiffrement, qui correspond au mode de chiffrement pris en charge sorti par mcrypt_list_modes().
2, Créer un vecteur d'initialisation
mcrypt_create_iv (mcrypt_enc_get_iv_size($td ), MCRYPT_RAND);
PS. Sous la plateforme Windows, le deuxième paramètre est fixé pour utiliser MCRYPT_RAND
3, Initialiser le tampon de chiffrement
mcrypt_generic_init($td, $key, $iv);
$td est Le descripteur de chiffrement renvoyé, $key est la clé de chiffrement, $iv est le vecteur d'initialisation
4, Cryptage des données
$encrypted_data = mcrypt_generic($td, $data);
$td est le descripteur de cryptage, $data est les données avant cryptage, fonction de cryptage des données Renvoie la chaîne chiffrée.
5. Terminez le cryptage et effectuez le travail de nettoyage
mcrypt_generic_deinit ($ td);
Décryptage
1, Ouvrez l'algorithme et le mode de décryptage, comme ci-dessus, obtenez le descripteur de décryptage $td
2, Créez un vecteur d'initialisation, comme ci-dessus, obtenez un Vecteur d'initialisation $iv
3, Initialiser le tampon de décryptage
mcrypt_generic_init($td,$key, $iv);
4. 🎜>
$decrypted_data = mdecrypt_generic($td, $encrypted_data);PS.$encrypted_data est le texte chiffré avant le décryptage, $decrypted_data est le texte en clair après le décryptage.
Recommandations associées :
Résumé de l'utilisation de l'extension de chiffrement php mcrypt
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Alipay Php ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...

L'article traite des fonctionnalités de sécurité essentielles dans les cadres pour se protéger contre les vulnérabilités, notamment la validation des entrées, l'authentification et les mises à jour régulières.

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.
