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

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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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)

Configuration du projet CakePHP Configuration du projet CakePHP Sep 10, 2024 pm 05:25 PM

Dans ce chapitre, nous comprendrons les variables d'environnement, la configuration générale, la configuration de la base de données et la configuration de la messagerie dans CakePHP.

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.

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

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

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.

See all articles