Inhaltsverzeichnis
Was sind symmetrische und asymmetrische Verschlüsselung? " >Was sind symmetrische und asymmetrische Verschlüsselung?
Was sollten wir für die Systemsicherheit tun? " >Was sollten wir für die Systemsicherheit tun?
OpenSSL Extended Symmetric Encryption" >OpenSSL Extended Symmetric Encryption
Symmetrische Verschlüsselungs-/Entschlüsselungsimplementierung
Abfrage des symmetrischen Verschlüsselungsalgorithmus
Zusammenfassung" >Zusammenfassung
Heim Backend-Entwicklung PHP-Problem Wie PHP symmetrische Verschlüsselung in der OpenSSL-Verschlüsselung verwendet

Wie PHP symmetrische Verschlüsselung in der OpenSSL-Verschlüsselung verwendet

May 31, 2021 am 09:28 AM
php

In diesem Artikel erfahren Sie, wie PHP die symmetrische Verschlüsselung bei der OpenSSL-Verschlüsselung verwendet. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Wie PHP symmetrische Verschlüsselung in der OpenSSL-Verschlüsselung verwendet

Wir haben viel über Verschlüsselungserweiterungen in PHP gelernt. Ab heute werden wir den entscheidenden Punkt lernen, nämlich die Verwendung der OpenSSL-Verschlüsselungserweiterung. Warum soll es der wichtigste Punkt sein? Erstens ist OpenSSL derzeit der De-facto-Standard für die Datenverschlüsselung in PHP und sogar im gesamten Entwicklungskreis ist die Verschlüsselung, einschließlich HTTPS/SSL, seine praktische Anwendung. Zweitens bietet OpenSSL symmetrische und asymmetrische Verschlüsselungsformen, die wir täglich verwenden Gängige Verschlüsselungsmethoden in , diese müssen wir beherrschen.

Unterscheidet es sich also von der Hash-Verschlüsselung? Bei der Hash-Typ-Verschlüsselung handelt es sich um eine irreversible Einwegverschlüsselung. Der verschlüsselte Inhalt ist eine hexadezimale Hash-Zeichenfolge. Wir können den Klartextinhalt nur umkehren, solange wir einen Salt-Wert oder mehrere Sätze einer zweischichtigen Verschlüsselung hinzufügen. Es ist sehr schwierig, es zurückzuentwickeln. Daher wird normalerweise die Hash-Verschlüsselung zum Speichern von Benutzerkennwörtern verwendet. Auch wenn die Datenbank das Benutzerkennwort preisgibt, ist es dennoch sicher. OpenSSL, eine Art symmetrischer/asymmetrischer Verschlüsselung, kann über ein bestimmtes Schlüsselwort oder Zertifikat eine Vorwärtsverschlüsselung und eine Rückwärtsentschlüsselung durchführen. Der Originaltext

ist verfügbar. Lassen Sie uns nun ausführlich über symmetrische und asymmetrische Verschlüsselung sprechen.

Was sind symmetrische und asymmetrische Verschlüsselung?

Bei der symmetrischen Verschlüsselung wird normalerweise der Originaltext durch einen Schlüssel verschlüsselt. Mit anderen Worten: Wenn die beiden Enden kommunizieren, muss der verschlüsselte Inhalt, den sie übertragen, denselben Schlüssel für Verschlüsselungs-/Entschlüsselungsvorgänge verwenden, unabhängig davon, ob es sich um den Server, den Client oder einen anderen Peer handelt. Beide Seiten müssen gleichzeitig einen solchen Schlüssel speichern. Ich denke, jeder hat auch darüber nachgedacht, egal ob es sich um eine Webentwicklung oder eine App-Entwicklung handelt, der Code kann dekompiliert und der Quellcode angezeigt werden. Wenn eine symmetrische Verschlüsselung verwendet wird, kann der Schlüssel leicht erhalten werden. Der Vorteil der symmetrischen Verschlüsselung besteht jedoch darin, dass sie sehr schnell ist und keine Ressourcen verbraucht.

Asymmetrische Verschlüsselung enthält an beiden Enden unterschiedliche Schlüssel. Genau wie die gängigsten https-Zertifikate, die wir sehen, haben sie zwei Konzepte: öffentlichen Schlüssel und privaten Schlüssel. Im Allgemeinen verwenden wir den öffentlichen Schlüssel zur Verschlüsselung und dann den privaten Schlüssel zur Entschlüsselung. Normalerweise wird der öffentliche Schlüssel öffentlich gemacht und an die andere Partei gesendet, während der private Schlüssel hier aufbewahrt wird. Mit anderen Worten: Wenn die andere Partei uns Daten sendet, verwendet sie den öffentlichen Schlüssel, den wir ihr gegeben haben, um die Daten zu verschlüsseln. Die Daten sind während des Übertragungsprozesses sehr sicher, da niemand sonst über den privaten Schlüssel verfügt, um die Daten zu entschlüsseln, bis wir sie erhalten Wenn Sie die Daten erhalten, verwenden Sie Ihren eigenen privaten Schlüssel, um sie zu entschlüsseln und die Originaldaten zu erhalten. Da die Schlüsselinhalte auf beiden Seiten nicht gleich sind, ist die asymmetrische Verschlüsselung deutlich sicherer als die symmetrische Verschlüsselung. Obwohl der Algorithmus und die Komplexität der asymmetrischen Verschlüsselung um einige Stufen höher sind als die der symmetrischen Verschlüsselung, sind Geschwindigkeit und Leistung im Vergleich zu den Vorteilen der asymmetrischen Verschlüsselung zu Engpässen bei der asymmetrischen Verschlüsselung geworden, insbesondere wenn die Datenmenge groß ist. Darüber hinaus besteht das mathematische Prinzip der asymmetrischen Verschlüsselung darin, dass es schwierig ist, große Zahlen zu zerlegen. Das heißt, je größer die Zahl, desto schwieriger ist die Faktorisierung. Wenn ein Algorithmus dieses Problem in kurzer Zeit lösen kann, dann herzlichen Glückwunsch. Es ist die Grundlage moderner Verschlüsselungsalgorithmen. Die Obergrenze wurde von Ihnen durchbrochen.

Zu den häufig verwendeten Algorithmen für die symmetrische Verschlüsselung gehören: AES, DES, 3DES, IDEA, RC2, RC5 usw. Die am häufigsten verwendeten Algorithmen sind AES und DES.

Zu den häufig verwendeten Algorithmen für die asymmetrische Verschlüsselung gehören: RSA, Elgamal, ECC usw. RSA wird sehr häufig verwendet und ist weit verbreitet, und einige Zertifikatsalgorithmen basieren auf RSA.

Was sollten wir für die Systemsicherheit tun?

Gibt es also einen Kompromiss für uns, diese beiden Verschlüsselungsfunktionen zu nutzen? Natürlich gibt es sie, und es ist auch eine ganz klassische Technologie: digitale Briefumschläge.

Tatsächlich ist die Bedeutung sehr einfach: Die jeweiligen Vorteile dieser beiden Verschlüsselungsmethoden nutzen. Die asymmetrische Verschlüsselung bietet eine hohe Sicherheit, aber eine langsamere Geschwindigkeit. Je größer die Datenmenge, desto langsamer ist die Geschwindigkeit. Dann verwenden wir sie, um den Schlüssel der symmetrischen Verschlüsselung zu verschlüsseln. Dann verwendet die eigentliche Dateneinheit diesen symmetrisch verschlüsselten Schlüssel, um eine symmetrische Verschlüsselung durchzuführen und so die Geschwindigkeit zu verbessern. Wenn wir es an den Client senden, enthält es auf diese Weise zwei Inhalte: Der eine ist der durch asymmetrische Verschlüsselung verschlüsselte Schlüssel und der andere ist der durch symmetrische Verschlüsselung verschlüsselte Dateninhalt. Nachdem der Client die Informationen erhalten hat, verwendet er zunächst den asymmetrischen Verschlüsselungsschlüssel, um den symmetrischen Verschlüsselungsschlüssel zu entschlüsseln, und verwendet diesen Schlüssel dann, um den endgültigen Dateninhalt zu entschlüsseln. Sind Sie verwirrt? Schauen wir es uns anhand eines Bildes an, und vielleicht versteht es jeder auf einen Blick.

Wie PHP symmetrische Verschlüsselung in der OpenSSL-Verschlüsselung verwendet

Unter diesen besteht keine Notwendigkeit, den öffentlichen Schlüssel und den privaten Schlüssel zu erklären. Der Sitzungsschlüssel ist der Schlüssel unseres symmetrischen Verschlüsselungsalgorithmus. In Kombination mit der obigen Erläuterung des digitalen Umschlagübertragungsprozesses sollte es jeder verstehen können.

OpenSSL Extended Symmetric Encryption

Okay, nachdem wir so viel theoretisches Wissen eingeführt haben, kehren wir zum Thema zurück. Wie implementieren wir symmetrische und asymmetrische Verschlüsselung in PHP? Es ist ganz einfach, verwenden Sie einfach die OpenSSL-Erweiterung. Diese Erweiterung wird auch mit dem PHP-Quellcode veröffentlicht. Fügen Sie beim Kompilieren und Installieren einfach --with-openssl hinzu. Natürlich ist auch die Installation der OpenSSL-Software in der Systemumgebung erforderlich. Diese ist grundsätzlich bereits in verschiedenen Betriebssystemen verfügbar. Wenn nicht, installieren Sie sie einfach selbst. Der einfachste Weg besteht darin, zu prüfen, ob in der Befehlszeile des Betriebssystems ein OpenSSL-Befehl vorhanden ist, um festzustellen, ob OpenSSL-bezogene Software auf dem aktuellen System installiert ist.

[root@localhost ~]# openssl version
OpenSSL 1.1.1 FIPS  11 Sep 2018
Nach dem Login kopieren

Heute beschäftigen wir uns hauptsächlich mit relativ einfachen Funktionen im Zusammenhang mit der symmetrischen Verschlüsselung.

Symmetrische Verschlüsselungs-/Entschlüsselungsimplementierung

$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
Nach dem Login kopieren

openssl_encrypt() dient zur Verschlüsselung von Daten. Es sind drei Parameter erforderlich: Originaltext, Algorithmus und Schlüssel. Es wird jedoch empfohlen, den iv-Parameter (Vektor) selbst zu definieren Wenn also kein iv-Parameter vorhanden ist, wird eine Warnmeldung ausgegeben. Wir verwenden openssl_cipher_iv_length(), um die vom aktuellen Algorithmus benötigte iv-Länge abzurufen, und verwenden dann die Funktion openssl_random_pseudo_bytes(), um einen zufälligen iv-Inhalt zu generieren, der der Länge des Algorithmus entspricht.

Der Parameter 0 in der Mitte ist der bitweise ODER-Wert des angegebenen Tags. Er verfügt über zwei optionale Konstanten: OPENSSL_RAW_DATA und OPENSSL_ZERO_PADDING. Wenn er auf OPENSSL_RAW_DATA gesetzt ist, werden die verschlüsselten Daten unverändert zurückgegeben (binärer verstümmelter Inhalt). Wenn es auf OPENSSL_ZERO_PADDING gesetzt ist, werden die verschlüsselten Daten als Inhalt nach Base64 zurückgegeben.

openssl_decrypt() wird zum Entschlüsseln von Daten verwendet. Die erforderlichen Parameter sind grundsätzlich dieselben wie bei der Verschlüsselungsfunktion, außer dass die Originaldaten durch verschlüsselte Daten ersetzt werden.

Bei der symmetrischen Verschlüsselung gibt es auch einen AEAD-Verschlüsselungsmodus (GCM oder CCM). Bei Verwendung dieses Modusalgorithmus benötigen wir einen weiteren Parameter.

$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;
// 测试对称加密
Nach dem Login kopieren

Dieses $tags ist ein Referenztypparameter, das heißt, es wird dieser Variablen nach der Verschlüsselung zugewiesen. Das gleiche Verifizierungs-Tag ist auch während der Entschlüsselung erforderlich.

Aus Sicht des Ver- und Entschlüsselungsprozesses müssen wir, wenn wir diese Informationen in der Datenbank oder beim Übertragen und Entschlüsseln speichern möchten, zumindest diese Felder, das für die Verschlüsselung verwendete iv und den für die Verschlüsselung verwendeten Algorithmus speichern oder übertragen , und AEAD-Modus, das zur Verschlüsselung verwendete Verifizierungstag, andernfalls können die Daten nicht entschlüsselt werden.

Abfrage des symmetrischen Verschlüsselungsalgorithmus

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
//     ……
// )
Nach dem Login kopieren

Der im obigen Verschlüsselungs-/Entschlüsselungstest ausgewählte Algorithmus wird über diese Funktion gefunden. Diese Funktion zeigt eine Liste aller unterstützten Algorithmen in der aktuellen Umgebung an.

Zusammenfassung

Der Inhalt dieses Artikels enthält viel theoretisches Wissen, das jeder noch verdauen muss. Die Verwendung von OpenSSL zur Implementierung der Verschlüsselungs-/Entschlüsselungsfunktion ist eigentlich relativ einfach. Schließlich ist alles für uns gekapselt. Wir müssen die Funktion nur gemäß der Dokumentation aufrufen. Lernen erfordert immer noch die Kombination von Theorie und Praxis. Wichtiger ist natürlich, es selbst zu tun!

Testcode:

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
Nach dem Login kopieren

Empfohlenes Lernen: php-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie PHP symmetrische Verschlüsselung in der OpenSSL-Verschlüsselung verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wie analysiert und verarbeitet man HTML/XML in PHP? Wie analysiert und verarbeitet man HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

7 PHP-Funktionen, die ich leider vorher nicht kannte 7 PHP-Funktionen, die ich leider vorher nicht kannte Nov 13, 2024 am 09:42 AM

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Erklären Sie JSON Web Tokens (JWT) und ihren Anwendungsfall in PHP -APIs. Apr 05, 2025 am 12:04 AM

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge PHP -Programm zum Zählen von Vokalen in einer Zeichenfolge Feb 07, 2025 pm 12:12 PM

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Erklären Sie die späte statische Bindung in PHP (statisch: :). Erklären Sie die späte statische Bindung in PHP (statisch: :). Apr 03, 2025 am 12:04 AM

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Was sind PHP Magic -Methoden (__construct, __Destruct, __call, __get, __set usw.) und geben Sie Anwendungsfälle an? Apr 03, 2025 am 12:03 AM

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.

See all articles