Maison >développement back-end >tutoriel php >Méthode de cryptage et de décryptage PHP basée sur openssl
openssl Introduction à OpenSSL
SSL est l'abréviation de Secure Socket Layer (Secure Socket Layer Protocol), qui peut assurer une transmission confidentielle sur Internet. Lorsque Netscape a lancé le premier navigateur Web, il a également proposé le standard de protocole SSL, actuellement en version 3.0. SSL utilise la technologie à clé publique. Son objectif est d'assurer la confidentialité et la fiabilité de la communication entre deux applications, et peut être pris en charge aussi bien côté serveur que côté utilisateur. Actuellement, le protocole SSL utilisant la technologie à clé publique est devenu la norme industrielle en matière de communications sécurisées sur Internet. Le protocole Secure Sockets Layer empêche les communications entre les applications utilisateur/serveur d'être écoutées par des attaquants et authentifie toujours le serveur et éventuellement l'utilisateur. Le protocole SSL nécessite un protocole TCP (Transport Layer Protocol) fiable. L'avantage du protocole SSL est qu'il est indépendant des protocoles de couche application de haut niveau (tels que HTTP, FTP, TELNET, etc.) peuvent être construits de manière transparente sur le protocole SSL. Le protocole SSL a complété l'algorithme de cryptage, la négociation des clés de communication et l'authentification du serveur avant la communication du protocole de couche application. Après cela, les données transmises par le protocole de couche application seront cryptées pour garantir la confidentialité des communications. Grâce à la description ci-dessus, le canal sécurisé fourni par le protocole SSL présente les trois caractéristiques suivantes : 1. Confidentialité des données Le cryptage des informations consiste à convertir le fichier d'entrée brut en un fichier crypté à l'aide d'un algorithme de cryptage pour assurer la confidentialité des données. Le processus de cryptage nécessite l'utilisation d'une clé pour crypter les données puis les déchiffrer. Sans la clé, les données cryptées ne peuvent pas être déchiffrées. Une fois les données cryptées, seule la clé doit être transmise via une méthode sécurisée. Les données cryptées peuvent être transmises publiquement. 2. Cohérence des données Le chiffrement peut également garantir la cohérence des données. Par exemple : le message code de vérification (MAC) peut vérifier les informations cryptées fournies par l'utilisateur. Le destinataire peut utiliser MAC pour vérifier les données cryptées afin de s'assurer que les données n'ont pas été falsifiées pendant la transmission. 3. Vérification de sécurité Une autre utilisation du cryptage est celle d'identification personnelle, et la clé de l'utilisateur peut être utilisée comme identification de vérification de sécurité. SSL utilise la technologie de cryptage à clé publique (RSA) comme protocole de communication crypté entre le client et le serveur lors de la transmission d'informations confidentielles.
Qu'est-ce qu'OpenSSL
Il existe de nombreux algorithmes cryptographiques, normes d'infrastructure à clé publique et protocoles SSL. Peut-être que ces fonctionnalités intéressantes vous donneront l'idée de mettre en œuvre tous ces algorithmes et normes. Si c’est le cas, même si je vous admire, je ne peux m’empêcher de vous le rappeler : c’est un processus intimidant. Ce travail n'est plus aussi simple que de lire quelques monographies de cryptographie et documents de protocole, mais de comprendre chaque détail de tous ces algorithmes, normes et documents de protocole, et d'utiliser le langage CTout d'abord, nous devons remercier Eric A. Young et Tim J. Hudson, qui ont commencé à écrire le progiciel OpenSSL qui a ensuite eu un impact énorme en 1995. Ce qui nous rend encore plus heureux, c'est qu'il s'agit d'un code open source. sans trop de restrictions, ce qui nous permet de faire beaucoup de choses avec ce logiciel. Eric A. Young et Tim J. Hudson sont canadiens. Ils sont ensuite devenus célèbres en écrivant OpenSSL, puis se sont tournés vers de grandes entreprises pour gagner beaucoup d'argent. En 1998, l'équipe du projet OpenSSL a repris le développement d'OpenSSL et a lancé la version 0.9.1 d'OpenSSL. Jusqu'à présent, l'algorithme OpenSSL est très complet et prend en charge SSL2.0, SSL3.0 et TLS1.0.
OpenSSL utilise le langage C comme langage de développement, ce qui confère à OpenSSL d'excellentes performances multiplateformes. C'est une chose très merveilleuse pour la majorité du personnel technique, qui peut utiliser les mêmes choses familières sur différentes plates-formes. OpenSSL prend en charge Linux, Windows, BSD, Mac, VMS et d'autres plates-formes, ce qui rend OpenSSL largement applicable. Cependant, pour les nouveaux programmeurs C++, ils ne sont peut-être pas très habitués au code du langage C, mais il est beaucoup plus facile de s'habituer au langage C que d'utiliser C++ pour réécrire un progiciel avec les mêmes fonctions qu'OpenSSL.
L'ensemble du progiciel OpenSSL peut être grossièrement divisé en trois parties fonctionnelles principales : la bibliothèque d'algorithmes cryptographiques, la bibliothèque de protocoles SSL et les applications. La
structure des répertoires d'OpenSSL est naturellement planifiée autour de ces trois parties fonctionnelles. En tant que package de développement de sécurité basé sur la cryptographie, OpenSSL fournit des fonctions assez puissantes et complètes, notamment des algorithmes cryptographiques majeurs, des fonctions de gestion d'encapsulation de clés et de certificats couramment utilisées et des protocoles SSL, et fournit une multitude d'applications pour les tests ou autres. fins.
1. Algorithme de cryptage symétrique
OpenSSL fournit un total de 8 algorithmes de chiffrement symétriques, dont 7 sont des algorithmes de chiffrement par blocs, et le seul algorithme de chiffrement par flux est RC4. Ces sept algorithmes de chiffrement par blocs sont AES, DES, Blowfish, CAST, IDEA, RC2 et RC5. Ils prennent tous en charge le mode livre de codes électronique (ECB), le mode de chaînage de blocs cryptés (CBC), le mode de retour de chiffrement (CFB) et le mode de retour de sortie. . (OFB) Quatre modes de chiffrement par chiffrement par blocs couramment utilisés. Parmi eux, la longueur des paquets du mode de retour de chiffrement (CFB) et du mode de retour de sortie (OFB) utilisés par AES est de 128 bits, tandis que d'autres algorithmes utilisent 64 bits. En fait, l'algorithme DES n'est pas seulement l'algorithme DES couramment utilisé, mais prend également en charge les algorithmes 3DES à trois et deux clés.
2. Algorithme de cryptage asymétrique
OpenSSL implémente un total de 4 algorithmes de cryptage asymétriques, dont l'algorithme DH, l'algorithme RSA, l'algorithme DSA et l'algorithme de courbe elliptique (EC). Échange général de clés d'utilisateur de l'algorithme DH. L'algorithme RSA peut être utilisé à la fois pour l'échange de clés et pour les signatures numériques, et bien sûr, si vous pouvez tolérer sa vitesse lente, il peut également être utilisé pour le cryptage des données. L'algorithme DSA n'est généralement utilisé que pour les signatures numériques.
3. Algorithme de synthèse d'informations
OpenSSL implémente 5 algorithmes de synthèse d'informations, à savoir MD2, MD5, MDC2, SHA (SHA1) et RIPEMD. L'algorithme SHA comprend en fait deux algorithmes de synthèse d'informations, SHA et SHA1. De plus, OpenSSL implémente également les deux algorithmes de synthèse d'informations DSS et DSS1 spécifiés dans la norme DSS.
4. Gestion des clés et des certificats
La gestion des clés et des certificats est une partie importante d'OpenSSL qui fournit des fonctions riches et prend en charge plusieurs normes.
Tout d'abord, OpenSSL implémente les normes associées aux certificats et aux clés ASN.1, fournissant des fonctions d'encodage et de décodage DER, PEM et BASE64 pour les certificats, les clés publiques, les clés privées, les demandes de certificat, les CRL et autres objets de données. OpenSSL fournit des méthodes, des fonctions et des applications pour générer diverses paires de clés publiques et clés symétriques, et fournit également des fonctions de codage et de décodage DER pour les clés publiques et privées. Et implémente les fonctions d'encodage et de décodage PKCS#12 et PKCS#8 de la clé privée. OpenSSL fournit une protection par chiffrement pour les clés privées dans la norme, afin que les clés puissent être stockées et distribuées en toute sécurité.
Sur cette base, OpenSSL implémente l'encodage et le décodage standard X.509 des certificats, l'encodage et le décodage du format PKCS#12, et l'encodage et le décodage du format PKCS#7. Il fournit également une base de données texte qui prend en charge les fonctions de gestion des certificats, notamment la génération de clés de certificat, la génération de demandes, l'émission, la révocation et la vérification de certificats.
En fait, l'application CA fournie par OpenSSL est un petit centre de gestion de certificats (CA), qui met en œuvre l'ensemble du processus d'émission de certificats et la plupart des mécanismes de gestion des certificats.
5. Protocoles SSL et TLS
OpenSSL implémente SSLv2 et SSLv3 du protocole SSL et prend en charge la plupart des protocoles d'algorithme. OpenSSL implémente également TLSv1.0. TLS est une version standardisée de SSLv3. Bien que la différence ne soit pas grande, de nombreux détails sont différents.
Bien qu'il existe de nombreux logiciels qui ont implémenté les fonctions d'OpenSSL, le protocole SSL implémenté dans OpenSSL peut nous donner une compréhension plus claire du protocole SSL, car il y a au moins deux points : Premièrement, le protocole SSL implémenté par OpenSSL est open Pour le code source, nous pouvons retracer chaque détail de la mise en œuvre du protocole SSL ; deuxièmement, le protocole SSL implémenté par OpenSSL est un protocole SSL pur et n'est pas combiné avec d'autres protocoles (tels que HTTP), ce qui clarifie la véritable nature du Protocole SSL.
6. Applications
Les applications OpenSSL sont devenues une partie importante d'OpenSSL, et les développeurs OpenSSL n'ont peut-être pas pensé au début. De nombreuses applications OpenSSL actuelles sont basées sur des applications OpenSSL plutôt que sur son API. Par exemple, OpenCA est entièrement implémenté à l'aide d'applications OpenSSL. Les applications OpenSSL sont écrites sur la base de la bibliothèque d'algorithmes cryptographiques et de la bibliothèque de protocoles SSL d'OpenSSL. Il existe donc également de très bons exemples d'utilisation de l'API OpenSSL. Après avoir lu tous ces exemples, vous aurez une compréhension plus complète de l'utilisation de l'API OpenSSL. aussi un travail qui exerce votre volonté.
Les applications OpenSSL offrent des fonctions relativement complètes. De l'avis de nombreuses personnes, OpenSSL a tout fait pour lui-même et n'a pas besoin de faire plus de travail de développement. Par conséquent, ils ont également mis ces applications en directive OpenSSL. Les applications OpenSSL incluent principalement la génération de clés, la gestion des certificats, la conversion de format, le cryptage et la signature des données, les tests SSL et d'autres fonctions de configuration auxiliaires.
7. Mécanisme du moteur Le mécanisme du moteur est apparu dans la version 0.9.6 d'OpenSSL. Au début, la version normale était séparée de la version qui prend en charge le moteur. Par la version 0.9.7 d'OpenSSL, le mécanisme du moteur a été intégré au noyau OpenSSL. un élément indispensable d'OpenSSL. L'objectif du mécanisme du moteur est de permettre à OpenSSL d'utiliser de manière transparente des bibliothèques de chiffrement logiciel ou des dispositifs de chiffrement matériel fournis par des tiers pour le chiffrement. Le mécanisme Engine d'OpenSSL atteint cet objectif avec succès, ce qui fait d'OpenSSL non seulement une bibliothèque de chiffrement, mais fournit une interface de chiffrement universelle qui peut se coordonner avec la plupart des bibliothèques de chiffrement ou des dispositifs de chiffrement. Bien sûr, pour faire fonctionner une bibliothèque de chiffrement ou un dispositif de chiffrement spécifique avec OpenSSL, vous devez écrire une petite quantité de code d'interface, mais la charge de travail n'est pas importante, même si elle nécessite quand même un peu de connaissances en cryptographie. La fonction du mécanisme Engine est fondamentalement la même que la fonction CSP fournie par Windows. Actuellement, la version 0.9.7 d'OpenSSL prend en charge huit types de dispositifs de chiffrement tiers intégrés, notamment : CryptoSwift, nCipher, Atalla, Nuron, UBSEC, Aep, SureWare et IBM 4758 CCA. Il existe désormais une interface Engine qui prend en charge l'interface PKCS#11, et quelqu'un développe également une interface qui prend en charge Microsoft CryptoAPI. Bien entendu, la prise en charge de toutes les interfaces Engine ci-dessus peut ne pas être complète. Par exemple, un ou deux algorithmes à clé publique peuvent être pris en charge.
8. Fonctions auxiliaires
Le mécanisme BIO est une interface IO de haut niveau fournie par OpenSSL. Cette interface encapsule presque tous les types d'interfaces IO, telles que l'accès à la mémoire, l'accès aux fichiers, Socket, etc. Cela améliore considérablement la réutilisabilité du code et réduit la complexité de l'API fournie par OpenSSL.
OpenSSL fournit également un ensemble complet de solutions et de fonctions API de support pour la génération et la gestion de nombres aléatoires. La qualité des nombres aléatoires est une condition préalable importante pour déterminer si une clé est sécurisée.
OpenSSL fournit également d'autres fonctions auxiliaires, telles que l'API pour générer des clés à partir de mots de passe, le mécanisme de fichier de configuration pour l'émission et la gestion des certificats, etc. Si vous êtes assez patient, vous découvrirez lentement de nombreuses petites fonctions au cours de l'utilisation approfondie d'OpenSSL, vous offrant constamment de nouvelles surprises.
Cet article présente principalement la méthode de cryptage et de décryptage basée sur openssl en php, et analyse les techniques associées de phpfonction personnaliséeimplémentant le cryptage et le décryptage basé sur openssl sous forme d'exemples. qui en a besoin peut Pour référence,
L'exemple de cet article décrit la méthode de cryptage et de déchiffrement basée sur openssl en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Méthode de cryptage et de décryptage via openssl
1.
function encrypt($id){ $id=serialize($id); $key="1112121212121212121212"; $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16)); $data['value']=openssl_encrypt($id, 'AES-256-CBC',$key,0,base64_decode($data['iv'])); $encrypt=base64_encode(json_encode($data)); return $encrypt; }
2. Méthode de décryptage openssl :
function decrypt($encrypt) { $key = '1112121212121212121212';//解密钥匙 $encrypt = json_decode(base64_decode($encrypt), true); $iv = base64_decode($encrypt['iv']); $decrypt = openssl_decrypt($encrypt['value'], 'AES-256-CBC', $key, 0, $iv); $id = unserialize($decrypt); if($id){ return $id; }else{ return 0; } }
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!