Table des matières
Qu'est-ce que le cryptage symétrique et asymétrique" >Qu'est-ce que le cryptage symétrique et asymétrique
Que devons-nous faire pour la sécurité du système ? " >Que devons-nous faire pour la sécurité du système ?
Cryptage symétrique étendu OpenSSL" >Cryptage symétrique étendu OpenSSL
Implémentation du cryptage/déchiffrement symétrique
Requête d'algorithme de chiffrement symétrique
Résumé" >Résumé
Maison développement back-end Problème PHP Comment PHP utilise le chiffrement symétrique dans le chiffrement OpenSSL

Comment PHP utilise le chiffrement symétrique dans le chiffrement OpenSSL

May 31, 2021 am 09:28 AM
php

Cet article vous présentera comment PHP utilise le cryptage symétrique dans le cryptage OpenSSL. 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 sera utile à tout le monde.

Comment PHP utilise le chiffrement symétrique dans le chiffrement OpenSSL

Nous avons beaucoup appris sur les extensions de chiffrement en PHP. À partir d’aujourd’hui, ce que nous allons apprendre est la chose la plus importante, à savoir l’utilisation de l’extension de chiffrement OpenSSL. Pourquoi est-ce considéré comme le point le plus important ? Premièrement, OpenSSL est actuellement la norme de facto pour le cryptage des données en PHP et même dans l'ensemble du cercle de développement, le cryptage, y compris HTTPS/SSL, est son application pratique. Deuxièmement, OpenSSL fournit des formes de cryptage symétriques et asymétriques, ce que nous faisons quotidiennement. méthodes de cryptage courantes dans , c'est ce que nous devons maîtriser.

Alors, est-ce différent du cryptage de type Hash ? Le cryptage de type hachage est un cryptage irréversible unidirectionnel.Le contenu crypté est une chaîne de hachage hexadécimale. Nous ne pouvons utiliser la table arc-en-ciel que pour inverser le contenu en texte brut, donc tant que nous ajoutons une valeur salt ou plusieurs ensembles de cryptage à deux couches, Il est très difficile de procéder à une ingénierie inverse. Par conséquent, le cryptage par hachage est généralement utilisé pour enregistrer les mots de passe des utilisateurs. Même si la base de données divulgue le mot de passe de l'utilisateur, il reste sécurisé. OpenSSL, un type de cryptage symétrique/asymétrique, peut effectuer un cryptage direct et un déchiffrement inverse via un certain mot-clé ou certificat. Le texte original

est disponible. Parlons maintenant en détail des problèmes de chiffrement symétrique et asymétrique.

Qu'est-ce que le cryptage symétrique et asymétrique

Le cryptage symétrique crypte généralement le texte original via une clé. Autrement dit, qu'il s'agisse du serveur, du client ou de tout autre homologue, lorsque les deux extrémités communiquent, le contenu chiffré qu'elles transmettent doit utiliser la même clé pour les opérations de chiffrement/déchiffrement. Les deux extrémités doivent sauvegarder une telle clé en même temps. Je suppose que tout le monde y a également pensé. Désormais, qu'il s'agisse de développement Web ou de développement d'applications, le code peut être décompilé et le code source peut être visualisé. Si un cryptage symétrique est utilisé, la clé peut être facilement obtenue. Cependant, l’avantage du chiffrement symétrique est qu’il est très rapide et ne consomme pas de ressources.

Le cryptage asymétrique contient des clés différentes aux deux extrémités. Tout comme les certificats https les plus courants que nous voyons, ils ont deux concepts : clé publique et clé privée. Généralement, nous utiliserons la clé publique pour le cryptage, puis la clé privée pour le déchiffrement. Habituellement, la clé publique est rendue publique et envoyée à l'autre partie, tandis que la clé privée est conservée ici. C'est-à-dire que lorsque l'autre partie nous envoie des données, elle utilise la clé publique que nous lui avons donnée pour chiffrer les données. Les données sont très sûres pendant le processus de transmission, car personne d'autre ne dispose de la clé privée pour déchiffrer les données avant. nous Après avoir reçu les données, vous utilisez votre propre clé privée pour les déchiffrer et obtenir les données originales. Étant donné que le contenu des clés des deux côtés n’est pas le même, le chiffrement asymétrique est bien plus sécurisé que le chiffrement symétrique. Bien que l'algorithme et la complexité du cryptage asymétrique soient plusieurs niveaux supérieurs à ceux du cryptage symétrique, par rapport aux avantages du cryptage symétrique, la vitesse et les performances sont devenues des goulots d'étranglement dans le cryptage asymétrique, en particulier lorsque la quantité de données est importante. De plus, le principe mathématique du cryptage asymétrique est qu'il est difficile de décomposer de grands nombres, c'est-à-dire que plus le nombre est grand, plus il est difficile de le factoriser. Si un algorithme peut résoudre ce problème en peu de temps, alors félicitations, c'est la base des algorithmes de cryptage modernes. C'est vous qui avez brisé le plafond.

Les algorithmes couramment utilisés pour le cryptage symétrique incluent : AES, DES, 3DES, IDEA, RC2, RC5, etc. Les algorithmes les plus couramment utilisés sont AES et DES.

Les algorithmes couramment utilisés pour le cryptage asymétrique incluent : RSA, Elgamal, ECC, etc. RSA est très couramment utilisé et courant SSL et certains algorithmes de certificat sont basés sur RSA.

Que devons-nous faire pour la sécurité du système ?

Alors, avons-nous un moyen de compromis pour utiliser ces deux capacités de cryptage ? Bien sûr qu’il y en a, et c’est aussi une technologie très classique : les enveloppes numériques.

En fait, le sens est très simple, c'est de profiter des avantages respectifs de ces deux méthodes de cryptage. Le cryptage asymétrique a une sécurité élevée, mais une vitesse lente, et plus la quantité de données est grande, plus la vitesse est lente. Ensuite, nous l'utilisons pour crypter la clé de cryptage symétrique. Habituellement, cette clé n'est pas très volumineuse. Ensuite, l’entité de données réelle utilise cette clé chiffrée symétriquement pour effectuer un chiffrement symétrique afin d’améliorer la vitesse. De cette façon, lorsque nous l'envoyons au client, il comprend deux contenus, l'un est la clé cryptée avec un cryptage asymétrique et l'autre est le contenu des données cryptées avec un cryptage symétrique. Une fois que le client a obtenu les informations, il utilise d'abord la clé de chiffrement asymétrique pour décoder la clé de chiffrement symétrique, puis utilise cette clé pour déchiffrer le contenu final des données. Êtes-vous confus? Jetons-y un coup d'œil à travers une image, et peut-être que tout le monde le comprendra d'un coup d'œil.

Comment PHP utilise le chiffrement symétrique dans le chiffrement OpenSSL

Parmi eux, la clé publique et la clé privée ne nécessitent aucune explication supplémentaire. La clé de session est la clé de notre algorithme de chiffrement symétrique. Combiné avec l'explication ci-dessus du processus de transmission de l'enveloppe numérique, tout le monde devrait pouvoir le comprendre.

Cryptage symétrique étendu OpenSSL

Bon, après avoir introduit tant de connaissances théoriques, revenons au sujet, comment implémenter le cryptage symétrique et asymétrique dans PHP Woollen Cloth ? C'est très simple, il suffit d'utiliser l'extension OpenSSL. Cette extension est également publiée avec le code source PHP. Ajoutez simplement --with-openssl lors de la compilation et de l'installation. Bien entendu, cela nécessite également que le logiciel OpenSSL soit installé dans l'environnement système. Il est déjà disponible dans divers systèmes d'exploitation. Sinon, installez-le vous-même. Le moyen le plus simple consiste à voir s'il existe une commande openssl sur la ligne de commande du système d'exploitation pour voir si le logiciel associé à OpenSSL est installé sur le système actuel.

[root@localhost ~]# openssl version
OpenSSL 1.1.1 FIPS  11 Sep 2018
Copier après la connexion

Aujourd'hui, nous étudions principalement des fonctions relativement simples liées au chiffrement symétrique.

Implémentation du cryptage/déchiffrement symétrique

$data = '测试对称加密';
$key = '加密用的key';
$algorithm =  'DES-EDE-CFB';


$ivlen = openssl_cipher_iv_length($algorithm);
$iv = openssl_random_pseudo_bytes($ivlen);


$password = openssl_encrypt($data, $algorithm, $key, 0, $iv);
echo $password, PHP_EOL;
// 4PvOc75QkIJ184/RULdOTeO8

echo openssl_decrypt($password, $algorithm, $key, 0, $iv), PHP_EOL;
// 测试对称加密

// Warning: openssl_encrypt(): Using an empty Initialization Vector (iv) is potentially insecure and not recommended
Copier après la connexion

openssl_encrypt() consiste à crypter les données. Elle nécessite trois paramètres : le texte original, l'algorithme et la clé. Ces derniers paramètres sont facultatifs, mais ils sont désormais recommandés. Pour définir le paramètre iv (vecteur), donc s'il n'y a pas de paramètre iv, un message d'avertissement sera signalé. Nous utilisons openssl_cipher_iv_length() pour obtenir la longueur iv requise par l'algorithme actuel, puis utilisons la fonction openssl_random_pseudo_bytes() pour générer un contenu iv aléatoire qui correspond à la longueur de l'algorithme.

Le paramètre 0 du milieu est la valeur OU au niveau du bit de la balise spécifiée. Il a deux constantes facultatives : OPENSSL_RAW_DATA et OPENSSL_ZERO_PADDING Si elle est définie sur OPENSSL_RAW_DATA, les données cryptées seront renvoyées telles quelles (contenu binaire tronqué). défini sur OPENSSL_ZERO_PADDING, les données cryptées seront renvoyées comme contenu après base64.

openssl_decrypt() est utilisé pour décrypter les données. Les paramètres requis sont fondamentalement les mêmes que la fonction de cryptage, sauf que les données d'origine sont remplacées par des données cryptées.

Dans le cryptage symétrique, nous avons également un mode de chiffrement AEAD (GCM ou CCM). Lors de l'utilisation de cet algorithme de mode, nous avons besoin d'un paramètre supplémentaire.

$algorithm =  'aes-128-gcm';
$password = openssl_encrypt($data, $algorithm, $key, 0, $iv, $tags);
echo $password, PHP_EOL;
// dPYsR+sdP56rQ99CNxciah+N

echo openssl_decrypt($password, $algorithm, $key, 0, $iv, $tags), PHP_EOL;
// 测试对称加密
Copier après la connexion

Ce $tags est un paramètre de type référence, c'est-à-dire qu'il sera attribué à cette variable après le cryptage. La même balise de vérification est également requise lors du décryptage.

Du point de vue du processus de cryptage et de décryptage, si nous voulons enregistrer ces informations dans la base de données, ou lors de la transmission et du décryptage, nous devons au moins enregistrer ou transmettre ces champs, le iv utilisé pour le cryptage, et le iv utilisé pour l'algorithme de cryptage et la balise de vérification utilisée pour le cryptage en mode AEAD, sinon les données ne peuvent pas être déchiffrées.

Requête d'algorithme de chiffrement symétrique

print_r(openssl_get_cipher_methods());

// Array
// (
//     [0] => AES-128-CBC
//     [1] => AES-128-CBC-HMAC-SHA1
//     [2] => AES-128-CFB
//     [3] => AES-128-CFB1
//     [4] => AES-128-CFB8
//     [5] => AES-128-CTR
//     [6] => AES-128-ECB
//     [7] => AES-128-OFB
//     [8] => AES-128-XTS
//     [9] => AES-192-CBC
//     [10] => AES-192-CFB
//     [11] => AES-192-CFB1
//     [12] => AES-192-CFB8
//     ……
// )
Copier après la connexion

L'algorithme sélectionné dans le test de chiffrement/déchiffrement ci-dessus est trouvé à partir de cette fonction. Cette fonction affiche une liste de tous les algorithmes pris en charge dans l'environnement actuel.

Résumé

Le contenu de cet article contient beaucoup de connaissances théoriques, et chacun doit encore le digérer. Utiliser OpenSSL pour implémenter la fonction de chiffrement/déchiffrement est en fait relativement simple. Après tout, tout a été encapsulé pour nous. Il suffit d'appeler la fonction conformément à la documentation. Apprendre nécessite encore de combiner théorie et pratique. Bien sûr, le plus important est de le faire soi-même !

Code de test :

https://github.com/zhangyue0503/dev-blog/blob/master/php/202007/source/PHP%E7%9A%84OpenSSL%E5%8A%A0%E5%AF%86%E6%89%A9%E5%B1%95%E5%AD%A6%E4%B9%A0%EF%BC%88%E4%B8%80%EF%BC%89%EF%BC%9A%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86.php
Copier après la connexion

Apprentissage recommandé : Tutoriel vidéo php

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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.

7 fonctions PHP que je regrette de ne pas connaître auparavant 7 fonctions PHP que je regrette de ne pas connaître auparavant Nov 13, 2024 am 09:42 AM

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Expliquez les jetons Web JSON (JWT) et leur cas d'utilisation dans les API PHP. Apr 05, 2025 am 12:04 AM

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,

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Programme PHP pour compter les voyelles dans une chaîne Programme PHP pour compter les voyelles dans une chaîne Feb 07, 2025 pm 12:12 PM

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Expliquez la liaison statique tardive en PHP (statique: :). Expliquez la liaison statique tardive en PHP (statique: :). Apr 03, 2025 am 12:04 AM

Liaison statique (statique: :) ​​implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Quelles sont les méthodes PHP Magic (__construct, __ destruct, __ call, __get, __set, etc.) et fournir des cas d'utilisation? Apr 03, 2025 am 12:03 AM

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.

See all articles