Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung der Verwendung der PHP-OpenSSL-Verschlüsselungserweiterung

Zusammenfassung der Verwendung der PHP-OpenSSL-Verschlüsselungserweiterung

墨辰丷
墨辰丷Original
2018-06-01 17:35:411391Durchsuche

Dieser Artikel stellt hauptsächlich eine Zusammenfassung der Verwendung der OpenSSL-Verschlüsselungserweiterung vor. Ich hoffe, dass er für alle hilfreich ist.

Einführung

Sicherheit war 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 Anfrage), Datenintegrität (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 und der Absender den Schlüssel verwendet Um die Datei zu verschlüsseln, verwendet der Empfänger denselben Schlüssel zum Entschlüsseln und Abrufen der Informationen. 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 Gegenstückpaar zu verwenden Schlüssel, unterteilt in öffentlichen Schlüssel und privaten Schlüssel. Der private Schlüssel wird sicher aufbewahrt und der öffentliche Schlüssel wird veröffentlicht. 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 Wert Bekannt als digitale Signatur. 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 Algorithmen gehören MD5, Hash1 und andere Algorithmen.

PHPs OpenSSL-Erweiterung

OpenSSL-Erweiterung verwendet das OpenSSL-Verschlüsselungserweiterungspaket, das mehrere PHP-bezogene Verschlüsselungs- und Entschlüsselungsfunktionen kapselt erleichtert die Ver- und Entschlüsselung von Daten erheblich. Häufig verwendete Funktionen sind:

Symmetrische Verschlüsselung bezogen auf:

string openssl_encrypt ( string $data , string $method , string $password)Wobei $data die zu verschlüsselnden Daten sind, $method die für die Verschlüsselung zu verwendende Methode ist, $password der zu verwendende Schlüssel ist und die Funktion die verschlüsselten Daten zurückgibt; Methodenliste kann Openssl_get_cipher_methods() verwenden, um sie abzurufen. Wir wählen eine davon zur Verwendung aus. 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 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 zum Verschlüsseln die Daten, wobei $data die zu verschlüsselnden Daten sind; $crypted ist eine Referenzvariable, und die verschlüsselten Daten werden in diese Variable eingefügt; $key sind die öffentlichen Schlüsseldaten, die bei der Gruppierung übergeben werden; , es ist möglicherweise nicht genau ein ganzzahliges Vielfaches der Anzahl der Verschlüsselungsbits. Die Optionen für $padding sind OPENSSL_PKCS1_PADDING und OPENSSL_NO_PADDING, die PKCS1-Padding bzw. kein Padding sind Diese 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 ] )

签名函数:$data为要签名的数据;$signature为签名结果的引用变量;$priv_key_id为签名所使用的私匙;$signature_alg为签名要使用的算法,其算法列表可以使用<span style="font-family:NSimsun">openssl_get_md_methods ()</span>得到,形如:

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

验签函数:与签名函数相对,只不过它要传入与私匙对应的公匙;其结果为签名验证结果,1为成功,0为失败,-1则表示错误;

加密实例

以下是一个非对称加密使用的小例子:

// 获取公匙
$pub_key = openssl_get_publickey(&#39;test.pem&#39;);

$encrypted = &#39;&#39;;
// 对数据分块加密
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;

而对称加密就非常简单了,直接使用ssl_encrypt()函数即可;

当然一些接口可能会对加密方法进行不同的要求,如不同的padding,加密块大小等等,这些就需要使用者自己调整了。

因为我们是在HTTP协议之上处理的数据,所以数据加密完成后,就可以直接发送了,不用再考虑底层的传输,使用cURL或SOAP扩展方法,就可以直接请求接口啦。

结语

密码学是一个十分高深的学科,它理论艰深,概念繁多,作为一个WEB开发人员,虽然不需要我们去研究其底层实现,但是学会使用封装好的方法很有利于我们开发。甚至了解其基本实现,也可以触类旁通,对算法等有新的理解。

以上就是本篇文的全部内容,希望能对大家的学习有所帮助。

相关推荐:

php实现获取当前url地址的方法

php实现36进制与10进制转换功能的方法

PHP全功能无变形图片裁剪操作类与用法详解

Das obige ist der detaillierte Inhalt vonZusammenfassung der Verwendung der PHP-OpenSSL-Verschlüsselungserweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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