Heim > Artikel > Backend-Entwicklung > Zusammenfassung der Verwendung der OpenSSL-Verschlüsselungserweiterung von PHP (empfohlen)
Einführung
In der Geschichte der Entwicklung des Internets war Sicherheit schon immer ein Thema, dem Entwickler große Bedeutung beimessen. Um die Sicherheit der Datenübertragung zu erreichen, müssen wir Folgendes sicherstellen: Datenquelle (nicht -gefälschte Anfragen), Datenintegrität (wurde nicht geändert), Datenschutz (verschlüsselter Text, kann nicht direkt gelesen werden) usw. Obwohl es bereits ein HTTPS-Protokoll gibt, das durch das SSL/TLS-Protokoll implementiert ist, ist es auf die korrekte Implementierung des Browsers auf dem Client angewiesen und daher sehr ineffizient. Daher benötigen wir immer noch allgemeine sensible Daten (wie Transaktionszahlungsinformationen usw.). Verschlüsselungsmethoden zum manuellen Verschlüsseln verwenden.
Obwohl es für normale WEB-Entwickler nicht notwendig ist, über ein tiefgreifendes Verständnis einiger zugrunde liegender sicherheitsbezogener Technologien zu verfügen, ist es notwendig, die Grundlagen der Verschlüsselung zu erlernen und vorhandene verschlüsselungsbezogene Tools zu verwenden. Aus beruflichen Gründen habe ich einige Artikel zum Thema Verschlüsselung gelesen und diesen Artikel auf der Grundlage meiner eigenen Erfahrung fertiggestellt.
Grundlagen der Verschlüsselung
Bevor wir lernen, wie man Verschlüsselung verwendet, müssen wir einige Grundkenntnisse im Zusammenhang mit der Verschlüsselung verstehen.
Verschlüsselungsalgorithmen werden im Allgemeinen in zwei Typen unterteilt: symmetrische Verschlüsselungsalgorithmen und asymmetrische Verschlüsselungsalgorithmen.
Symmetrische Verschlüsselung
Der symmetrische Verschlüsselungsalgorithmus besteht darin, dass Absender und Empfänger der Nachricht denselben Schlüssel verwenden. Der Absender verwendet den Schlüssel zum Verschlüsseln der Datei und der Empfänger verwendet denselben Schlüssel zum Verschlüsseln entschlüsseln und die Informationen erhalten. Gängige symmetrische Verschlüsselungsalgorithmen sind: des/aes/3des.
Die Merkmale symmetrischer Verschlüsselungsalgorithmen sind: schnell, die Dateigröße ändert sich vor und nach der Verschlüsselung nicht wesentlich, aber die Speicherung des Schlüssels ist ein großes Problem , weil der Absender der Nachricht Wenn der Schlüssel einer der Parteien verloren geht, wird die Informationsübertragung unsicher.
Asymmetrische Verschlüsselung
Das Gegenteil der symmetrischen Verschlüsselung ist die asymmetrische Verschlüsselung. Die Kernidee der asymmetrischen Verschlüsselung besteht darin, ein Paar relativer Schlüssel zu verwenden, die in einen öffentlichen Schlüssel und einen privaten Schlüssel unterteilt sind Schlüssel selbst Bewahren Sie ihn sicher auf und machen Sie den öffentlichen Schlüssel öffentlich. Der öffentliche Schlüssel und der private Schlüssel sind ein Paar. Wenn der öffentliche Schlüssel zum Verschlüsseln von Daten verwendet wird, kann nur der entsprechende private Schlüssel zum Entschlüsseln verwendet werden. Wenn der private Schlüssel zum Verschlüsseln der Daten verwendet wird, kann nur der entsprechende öffentliche Schlüssel verwendet werden kann zum Entschlüsseln verwendet werden. Verwenden Sie einfach den öffentlichen Schlüssel des Empfängers, um die Daten vor dem Senden zu verschlüsseln. Zu den gängigen asymmetrischen Verschlüsselungsalgorithmen gehört RSA/DSA:
Obwohl die asymmetrische Verschlüsselung keine Schlüsselspeicherprobleme hat, erfordert sie einen großen Rechenaufwand und die Verschlüsselungsgeschwindigkeit ist sehr langsam. Manchmal müssen wir große Datenmengen blockieren. Verschlüsselung.
Digitale Signatur
Um die Integrität der Daten sicherzustellen, muss ein Hash-Wert durch eine Hash-Funktion berechnet werden. Dieser Hash-Wert wird als digitale Signatur bezeichnet. Seine Eigenschaften sind:
•Egal wie groß die Originaldaten sind, die Länge des Ergebnisses ist gleich;
•Die Eingabe ist dieselbe und die Ausgabe ist dieselbe; Kleine Änderungen an der Eingabe machen einen großen Unterschied im Ergebnis.
•Der Verschlüsselungsprozess ist irreversibel und die Originaldaten können nicht über den Hash-Wert abgerufen werden.
Array( 0 => aes-128-cbc, // aes加密 1 => des-ecb, // des加密 2 => des-ede3, // 3des加密 ... )Die Entschlüsselungsfunktion ist string openssl_encrypt (string $data, string $method, string $password) Asymmetrische Verschlüsselung im Zusammenhang mit:
openssl_get_publickey();openssl_pkey_get_public(); // 从证书导出公匙; openssl_get_privatekey();openssl_pkey_get_private(); // 从证书导出私匙;Sie müssen alle nur die Zertifikatsdatei (normalerweise eine .pem-Datei) übergeben.
openssl_public_encrypt(string $data , string &$crypted , mixed $key [, int $padding = OPENSSL\_PKCS1\_PADDING ] )Verwenden Sie den öffentlichen Schlüssel, um die Daten zu verschlüsseln $data sind die zu verschlüsselnden Daten; $crypted ist eine Referenzvariable, die verschlüsselten Daten werden in diese Variable eingefügt; $key sind die zu übergebenden öffentlichen Schlüsseldaten, da dies bei der Gruppierung der verschlüsselten Daten möglicherweise nicht der Fall ist genau ein ganzzahliges Vielfaches der Anzahl der Verschlüsselungsbits, daher ist $padding erforderlich (Padding). Zu den Optionen für $padding gehören OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING, die PKCS1-Padding bzw. kein Padding sind. Das Gegenteil dieser Methode ist (die eingehenden Parameter sind konsistent):
openssl_private_encrypt(); // 使用私匙加密; openssl_private_decrypt(); // 使用私匙解密; openssl_private_decrypt(); // 使用公匙解密;Es gibt auch Signatur- und Verifizierungsfunktionen:
bool openssl_sign ( string $data , string &$signature , mixed $priv_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] ) int openssl_verify ( string $data , string $signature , mixed $pub_key_id [, mixed $signature_alg = OPENSSL_ALGO_SHA1 ] )Signaturfunktion: $data sind die zu signierenden Daten; $signature is die Referenzvariable des Signaturergebnisses; $priv_key_id ist der für den Signaturschlüssel verwendete Algorithmus; die Algorithmusliste kann mit openssl_get_md_methods () in der Form abgerufen werden: Signaturüberprüfungsfunktion: Sie ist das Gegenteil der Signaturfunktion, außer dass sie den privaten Schlüssel übergeben muss. Der dem Schlüssel entsprechende öffentliche Schlüssel ist das Ergebnis der Signaturüberprüfung. 1 bedeutet Erfolg, 0 bedeutet Fehler, -1 bedeutet Fehler;
array( 0 => MD5, 1 => SHA1, 2 => SHA256, ... )
Verschlüsselungsbeispiel
Das Folgende ist ein kleines Beispiel für eine asymmetrische Verschlüsselung. Beispiel:
Symmetrische Verschlüsselung ist sehr einfach, verwenden Sie einfach die ssl_encrypt()-Funktion;// 获取公匙 $pub_key = openssl_get_publickey('test.pem'); $encrypted = ''; // 对数据分块加密 for ($offset = 0, $length = strlen($raw_msg); $offset < $length; $offset += $key_size){ $encryptedBlock = ''; $data = substr($raw_msg, $offset, $key_size) if (!openssl_public_encrypt($data, $encryptedBlock, $pub_key, OPENSSL_PKCS1_PADDING)){ return ''; } else { $encrypted .= $encryptedBlock; } return $encrypted;
Natürlich können einige Schnittstellen unterschiedliche Anforderungen an Verschlüsselungsmethoden haben, wie z. B. unterschiedliche Auffüllung, Verschlüsselungsblockgröße usw., diese müssen vom Benutzer angepasst werden.
Da wir die Daten über das HTTP-Protokoll verarbeiten, können sie nach Abschluss der Datenverschlüsselung direkt gesendet werden. Mithilfe von cURL- oder SOAP-Erweiterungsmethoden ist dies möglich direkt die Schnittstelle anfordern.
Fazit
Kryptographie ist ein sehr fortgeschrittenes Thema mit schwierigen Theorien und vielen Konzepten. Obwohl wir als WEB-Entwickler die zugrunde liegende Implementierung nicht studieren müssen, ist das Erlernen der Verwendung gekapselter Methoden für unsere Entwicklung sehr vorteilhaft. Selbst wenn Sie die grundlegende Implementierung verstehen, können Sie ein neues Verständnis von Algorithmen usw. erlangen.
Die obige Zusammenfassung der Verwendung der OpenSSL-Verschlüsselungserweiterung von PHP (empfohlen) ist der gesamte vom Herausgeber geteilte Inhalt. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie die chinesische PHP-Website unterstützen.
Weitere Zusammenfassungen zur Verwendung der PHP-openssl-Verschlüsselungserweiterung (empfohlen) finden Sie auf der chinesischen PHP-Website!