Heim  >  Artikel  >  php教程  >  Zusammenfassung der Verwendung der PHP-OpenSSL-Verschlüsselungserweiterung

Zusammenfassung der Verwendung der PHP-OpenSSL-Verschlüsselungserweiterung

高洛峰
高洛峰Original
2016-12-23 17:54:241163Durchsuche

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.

Gemeinsame digitale Signaturalgorithmen umfassen 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加密
  ...
  )


Die Entschlüsselungsfunktion ist string openssl_encrypt ( string $data , string $method , string $password)

Asymmetrische Verschlüsselung bezogen auf:

openssl_get_publickey();openssl_pkey_get_public();   // 从证书导出公匙;
openssl_get_privatekey();openssl_pkey_get_private();  // 从证书导出私匙;


Sie müssen alle nur übergeben werden die Zertifikatsdatei (normalerweise eine .pem-Datei) ;

openssl_public_encrypt(string $data , string &$crypted , mixed $key [, int $padding = OPENSSL\_PKCS1\_PADDING ] )


Verwenden Sie den öffentlichen Schlüssel, um Daten zu verschlüsseln, wobei $data die Daten sind, zu denen sie gehören verschlüsselt werden; $crypted ist eine Referenzvariable, nach der Verschlüsselung werden die Daten in diese Variable eingefügt; $key sind die zu übergebenden öffentlichen Schlüsseldaten, da diese möglicherweise nicht genau ein ganzzahliges Vielfaches von sind die Anzahl der Verschlüsselungsbits, daher ist $padding erforderlich, die Optionen von $padding umfassen OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING, die PKCS1-Padding bzw. kein Padding sind;

Das Gegenteil dieser Methode ist (die Eingabeparameter 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 ist die zu signierende Daten; $priv_key_id ist der für die Signatur verwendete Algorithmus; für die Signatur. Die Algorithmusliste kann mit openssl_get_md_methods () in der Form abgerufen werden:

array(
  0 => MD5,
  1 => SHA1,
  2 => SHA256,
  ...
)


Signaturüberprüfungsfunktion: gegenüber der Signaturfunktion, mit der Ausnahme, dass der öffentliche Schlüssel übergeben werden muss, der dem privaten Schlüssel entspricht. Das Ergebnis ist das Ergebnis der Signaturüberprüfung. 1 bedeutet Erfolg, 0 bedeutet Fehler, -1 bedeutet Fehler

Verschlüsselungsbeispiel

Das Folgende ist ein kleines Beispiel für asymmetrische Verschlüsselung:

// 获取公匙
$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;


Symmetrische Verschlüsselung ist sehr einfach, verwenden Sie einfach ssl_encrypt() Funktion direkt;

Natürlich können einige Schnittstellen unterschiedliche 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 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!

Stellungnahme:
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