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, ein tiefgreifendes Verständnis einiger zugrunde liegender sicherheitsbezogener Technologien zu haben, 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, aufgeteilt in einen öffentlichen Schlüssel und einen privaten Schlüssel. Der private 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加密 ... )
openssl_get_publickey();openssl_pkey_get_public(); // 从证书导出公匙; openssl_get_privatekey();openssl_pkey_get_private(); // 从证书导出私匙;
openssl_public_encrypt(string $data , string &$crypted , mixed $key [, int $padding = OPENSSL\_PKCS1\_PADDING ] )
openssl_private_encrypt(); // 使用私匙加密; openssl_private_decrypt(); // 使用私匙解密; openssl_private_decrypt(); // 使用公匙解密;
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 ] )
array( 0 => MD5, 1 => SHA1, 2 => SHA256, ... )
// 获取公匙 $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;
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 können Sie diese direkt anfordern Schnittstelle.
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 es gut, den Umgang mit der Kapselung zu erlernen Die Methode ist 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 Artikel zur Verwendungszusammenfassung der OpenSSL-Verschlüsselungserweiterung von PHP finden Sie auf der chinesischen PHP-Website!