Zusammenfassung der Verwendung der OpenSSL-Verschlüsselungserweiterung von PHP (empfohlen)

高洛峰
Freigeben: 2023-03-04 14:16:01
Original
1440 Leute haben es durchsucht

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.

Zu den gängigen digitalen Signaturalgorithmen gehört MD5 , hash1 und andere Algorithmen.

PHPs OpenSSL-Erweiterung

Die OpenSSL-Erweiterung verwendet das OpenSSL-Verschlüsselungserweiterungspaket, das mehrere PHP-Funktionen im Zusammenhang mit der Ver- und Entschlüsselung kapselt, was die Ver- und Entschlüsselung von Daten erheblich erleichtert. Häufig verwendete Funktionen sind:

Symmetrische Verschlüsselung im Zusammenhang mit:

string openssl_encrypt (string $data, string $method, string $password)

wobei $data das ist, was sein soll verschlüsselte Daten, $method ist die für die Verschlüsselung zu verwendende Methode, $password ist der zu verwendende Schlüssel und die Funktion gibt die verschlüsselten Daten zurück

Die $method-Liste kann mit openssl_get_cipher_methods() abgerufen werden Wählen Sie eine davon aus und verwenden Sie , die $method-Liste hat die Form:

Array(
  0 => aes-128-cbc,  // aes加密
  1 => des-ecb,    // des加密
  2 => des-ede3,   // 3des加密
  ...
  )
Nach dem Login kopieren
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();  // 从证书导出私匙;
Nach dem Login kopieren
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 ] )
Nach dem Login kopieren
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(); // 使用公匙解密;
Nach dem Login kopieren
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 ] )
Nach dem Login kopieren
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,
  ...
)
Nach dem Login kopieren

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 = &#39;&#39;;
  $data = substr($raw_msg, $offset, $key_size)
  if (!openssl_public_encrypt($data, $encryptedBlock, $pub_key, OPENSSL_PKCS1_PADDING)){
    return &#39;&#39;;
  } else {
    $encrypted .= $encryptedBlock;
 }
 return $encrypted;
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage