Heim >Backend-Entwicklung >PHP-Tutorial >PHP-Verschlüsselungs- und Entschlüsselungsmethode basierend auf OpenSSL

PHP-Verschlüsselungs- und Entschlüsselungsmethode basierend auf OpenSSL

怪我咯
怪我咯Original
2017-07-12 10:03:124579Durchsuche

openssl Einführung in OpenSSL
SSL ist die Abkürzung für Secure Socket Layer (Secure Socket Layer Protocol), das eine vertrauliche Übertragung im Internet ermöglichen kann. Als Netscape den ersten Webbrowser auf den Markt brachte, schlug es auch den SSL-Protokollstandard vor, der derzeit in Version 3.0 vorliegt. SSL verwendet Public-Key-Technologie. Sein Ziel besteht darin, die Vertraulichkeit und Zuverlässigkeit der Kommunikation zwischen zwei Anwendungen sicherzustellen und kann sowohl auf der Serverseite als auch auf der Benutzerseite unterstützt werden. Derzeit ist das SSL-Protokoll mit Public-Key-Technologie zum Industriestandard für sichere Kommunikation im Internet geworden. Das Secure Sockets Layer-Protokoll verhindert, dass die Kommunikation zwischen Benutzer-/Serveranwendungen von Angreifern abgehört wird, und authentifiziert stets den Server und optional den Benutzer. Das SSL-Protokoll erfordert ein zuverlässiges Transport Layer Protocol (TCP). Der Vorteil des SSL-Protokolls besteht darin, dass es unabhängig von Protokollen der Anwendungsschicht ist (wie HTTP, FTP, TELNET usw.) und transparent auf dem SSL-Protokoll aufbauen kann. Das SSL-Protokoll hat den Verschlüsselungsalgorithmus, die Aushandlung des Kommunikationsschlüssels und die Serverauthentifizierung abgeschlossen, bevor die Protokollkommunikation auf Anwendungsebene erfolgt. Anschließend werden die vom Anwendungsschichtprotokoll übertragenen Daten verschlüsselt, um die Vertraulichkeit der Kommunikation zu gewährleisten. Gemäß der obigen Beschreibung weist der vom SSL-Protokoll bereitgestellte sichere Kanal die folgenden drei Merkmale auf: 1. Datenvertraulichkeit Bei der Informationsverschlüsselung wird die einfache Eingabedatei mithilfe eines Verschlüsselungsalgorithmus in eine verschlüsselte Datei umgewandelt, um die Datenvertraulichkeit zu gewährleisten. Der Verschlüsselungsprozess erfordert die Verwendung eines Schlüssels, um Daten zu verschlüsseln und anschließend zu entschlüsseln. Ohne den Schlüssel können die verschlüsselten Daten nicht entschlüsselt werden. Nach der Verschlüsselung der Daten muss nur noch der Schlüssel mit einem sicheren Verfahren übertragen werden. Verschlüsselte Daten können öffentlich übertragen werden. 2. Datenkonsistenz Durch Verschlüsselung kann auch die Datenkonsistenz sichergestellt werden. Beispiel: Nachricht Verifizierungscode (MAC) kann die vom Benutzer bereitgestellten verschlüsselten Informationen überprüfen. Der Empfänger kann MAC verwenden, um die verschlüsselten Daten zu überprüfen, um sicherzustellen, dass die Daten während der Übertragung nicht manipuliert wurden. 3. Sicherheitsüberprüfung Eine weitere Verwendung der Verschlüsselung besteht darin, dass der Schlüssel des Benutzers als seine Sicherheitsüberprüfungsidentität verwendet werden kann. SSL nutzt die Public-Key-Verschlüsselungstechnologie (RSA) als verschlüsseltes Kommunikationsprotokoll zwischen Client und Server bei der Übertragung vertraulicher Informationen.
Was ist OpenSSL?
Es gibt zahlreiche kryptografische Algorithmen, Public-Key-Infrastrukturstandards und SSL-Protokolle. Vielleicht bringen Sie diese interessanten Funktionen auf die Idee, all diese Algorithmen und Standards zu implementieren. Wenn ja, obwohl ich Sie bewundere, kann ich nicht umhin, Sie daran zu erinnern: Dies ist ein entmutigender Prozess. Diese Aufgabe ist nicht mehr so ​​einfach wie das Lesen einiger Kryptographie-Monographien und Protokolldokumente, sondern es geht darum, jedes Detail all dieser Algorithmen, Standards und Protokolldokumente zu verstehen und die C-SpracheZuallererst sollten wir Eric A. Young und Tim J. Hudson danken, die 1995 mit dem Schreiben des OpenSSL-Softwarepakets begannen, das später große Auswirkungen hatte. Was uns noch mehr freut, ist, dass es sich um einen Open-Source-Code handelt ohne allzu viele Einschränkungen, was uns ermöglicht, viele Dinge mit diesem Softwarepaket zu tun. Eric A. Young und Tim J. Hudson sind Kanadier. Sie wurden später durch das Schreiben von OpenSSL berühmt und gingen dann zu großen Unternehmen, um viel Geld zu verdienen. 1998 übernahm das OpenSSL-Projektteam die Entwicklung von OpenSSL und brachte die OpenSSL-Version 0.9.1 auf den Markt. Bisher ist der OpenSSL-Algorithmus sehr vollständig und unterstützt SSL2.0, SSL3.0 und TLS1.0.
OpenSSL verwendet die Sprache C als Entwicklungssprache, wodurch OpenSSL eine hervorragende plattformübergreifende Leistung bietet. Dies ist eine wunderbare Sache für die meisten technischen Mitarbeiter, die dieselben vertrauten Dinge auf verschiedenen Plattformen verwenden können. OpenSSL unterstützt Linux, Windows, BSD, Mac, VMS und andere Plattformen, wodurch OpenSSL weit verbreitet ist. Allerdings sind die neuen C++-Programmierer möglicherweise noch nicht sehr mit dem C-Sprachcode vertraut, aber es ist viel einfacher, sich an die C-Sprache zu gewöhnen, als C++ zu verwenden, um ein Softwarepaket mit denselben Funktionen wie OpenSSL neu zu schreiben.
Das gesamte OpenSSL-Softwarepaket kann grob in drei Hauptfunktionsteile unterteilt werden: kryptografische Algorithmenbibliothek, SSL-Protokollbibliothek und Anwendungen. Die
Verzeichnisstruktur
von OpenSSL ist natürlich um diese drei Funktionsteile herum geplant. Als kryptografiebasiertes Sicherheitsentwicklungspaket bietet OpenSSL recht leistungsstarke und umfassende Funktionen, darunter wichtige kryptografische Algorithmen, häufig verwendete Schlüssel- und Zertifikatskapselungsverwaltungsfunktionen sowie SSL-Protokolle, und bietet eine Fülle von Anwendungen für Tests oder andere Zwecke Zwecke.
1. Symmetrischer Verschlüsselungsalgorithmus
OpenSSL bietet insgesamt 8 symmetrische Verschlüsselungsalgorithmen, davon 7 Blockverschlüsselungsalgorithmen und der einzige Streamverschlüsselungsalgorithmus ist RC4. Diese sieben Blockverschlüsselungsalgorithmen sind AES, DES, Blowfish, CAST, IDEA, RC2 und RC5. Sie unterstützen alle den Electronic Codebook Mode (ECB), den Encrypted Block Chaining Mode (CBC), den Encryption Feedback Mode (CFB) und den Output Feedback Mode . (OFB) Vier häufig verwendete Blockverschlüsselungsmodi. Unter diesen beträgt die Paketlänge des von AES verwendeten Verschlüsselungs-Feedback-Modus (CFB) und Ausgabe-Feedback-Modus (OFB) 128 Bit, während andere Algorithmen 64 Bit verwenden. Tatsächlich ist der DES-Algorithmus nicht nur der häufig verwendete DES-Algorithmus, sondern unterstützt auch 3DES-Algorithmen mit drei und zwei Schlüsseln.
2. Asymmetrischer Verschlüsselungsalgorithmus
OpenSSL implementiert insgesamt 4 asymmetrische Verschlüsselungsalgorithmen, darunter DH-Algorithmus, RSA-Algorithmus, DSA-Algorithmus und Elliptic-Curve-Algorithmus (EC). Allgemeiner Benutzerschlüsselaustausch mit DH-Algorithmus. Der RSA-Algorithmus kann sowohl für den Schlüsselaustausch als auch für digitale Signaturen verwendet werden. Wenn Sie die langsame Geschwindigkeit tolerieren, kann er natürlich auch für die Datenverschlüsselung verwendet werden. Der DSA-Algorithmus wird im Allgemeinen nur für digitale Signaturen verwendet.
3. Information Digest-Algorithmus
OpenSSL implementiert 5 Information Digest-Algorithmen, nämlich MD2, MD5, MDC2, SHA (SHA1) und RIPEMD. Der SHA-Algorithmus umfasst tatsächlich zwei Informationsauswertungsalgorithmen, SHA und SHA1. Darüber hinaus implementiert OpenSSL auch die beiden im DSS-Standard angegebenen Informationsauswertungsalgorithmen DSS und DSS1.
4. Schlüssel- und Zertifikatsverwaltung
Die Schlüssel- und Zertifikatsverwaltung ist ein wichtiger Bestandteil von PKI und unterstützt mehrere Standards.
Zuallererst implementiert OpenSSL das ASN.1-Zertifikat und die schlüsselbezogenen Standards und stellt DER-, PEM- und BASE64-Kodierungs- und Dekodierungsfunktionen für Zertifikate, öffentliche Schlüssel, private Schlüssel, Zertifikatanforderungen, CRL und andere Datenobjekte bereit. OpenSSL bietet Methoden, Funktionen und Anwendungen zum Generieren verschiedener öffentlicher Schlüsselpaare und symmetrischer Schlüssel sowie DER-Kodierungs- und Dekodierungsfunktionen für öffentliche Schlüssel und private Schlüssel. Und implementiert die PKCS#12- und PKCS#8-Kodierungs- und Dekodierungsfunktionen des privaten Schlüssels. OpenSSL bietet im Standard Verschlüsselungsschutz für private Schlüssel, sodass Schlüssel sicher gespeichert und verteilt werden können.
Auf dieser Basis implementiert OpenSSL die X.509-Standardkodierung und -dekodierung von Zertifikaten, die Kodierung und Dekodierung des PKCS#12-Formats und die Kodierung und Dekodierung von PKCS#7. Es stellt außerdem eine Textdatenbank bereit, die Zertifikatsverwaltungsfunktionen unterstützt, einschließlich Zertifikatsschlüsselgenerierung, Anforderungsgenerierung, Zertifikatsausstellung, Widerruf und Überprüfung.
Tatsächlich handelt es sich bei der von OpenSSL bereitgestellten CA-Anwendung um ein kleines Zertifikatsverwaltungszentrum (CA), das den gesamten Prozess der Zertifikatsausstellung und die meisten Mechanismen der Zertifikatsverwaltung implementiert.
5. SSL- und TLS-Protokolle
OpenSSL implementiert SSLv2 und SSLv3 des SSL-Protokolls und unterstützt die meisten Algorithmusprotokolle. OpenSSL implementiert auch TLSv1.0, eine standardisierte Version von SSLv3. Obwohl der Unterschied nicht groß ist, gibt es viele Unterschiede.
Obwohl es viele Softwareprogramme gibt, die die Funktionen von OpenSSL implementiert haben, kann uns das in OpenSSL implementierte SSL-Protokoll ein klareres Verständnis des SSL-Protokolls vermitteln, da es mindestens zwei Punkte gibt: Erstens ist das von OpenSSL implementierte SSL-Protokoll Für den Quellcode können wir jedes Detail der SSL-Protokollimplementierung nachverfolgen. Zweitens ist das von OpenSSL implementierte SSL-Protokoll ein reines SSL-Protokoll und wird nicht mit anderen Protokollen (wie HTTP) kombiniert, was die wahre Natur des Protokolls verdeutlicht SSL-Protokoll.
6. Anwendungen
OpenSSL-Anwendungen sind zu einem wichtigen Bestandteil von OpenSSL geworden, und ihre Bedeutung wurde von OpenSSL-Entwicklern möglicherweise zunächst nicht bedacht. Viele der aktuellen OpenSSL-Anwendungen basieren auf OpenSSL-Anwendungen und nicht auf der API. OpenCA wird beispielsweise vollständig mithilfe von OpenSSL-Anwendungen implementiert. OpenSSL-Anwendungen basieren auf der kryptografischen Algorithmusbibliothek und der SSL-Protokollbibliothek. Nach dem Lesen aller dieser Beispiele erhalten Sie natürlich ein umfassenderes Verständnis der OpenSSL-API-Nutzung auch ein Job, der Ihre Willenskraft trainiert.
OpenSSL-Anwendungen bieten relativ umfassende Funktionen. Nach Meinung vieler Menschen hat OpenSSL keine weitere Entwicklungsarbeit geleistet. Daher werden diese Anwendungen auch zu einer OpenSSL-Anweisung. OpenSSL-Anwendungen umfassen hauptsächlich Schlüsselgenerierung, Zertifikatsverwaltung, Formatkonvertierung, Datenverschlüsselung und -signatur, SSL-Tests und andere Hilfskonfigurationsfunktionen.
7. Engine-Mechanismus Der Engine-Mechanismus erschien in der OpenSSL-Version 0.9.6. Durch die OpenSSL-Version 0.9.7 wurde der Engine-Mechanismus in den OpenSSL-Kernel integriert ein unverzichtbarer Bestandteil von OpenSSL. Der Zweck des Engine-Mechanismus besteht darin, OpenSSL die transparente Verwendung von Software-Verschlüsselungsbibliotheken oder Hardware-Verschlüsselungsgeräten zu ermöglichen, die von Dritten zur Verschlüsselung bereitgestellt werden. Der Engine-Mechanismus von OpenSSL erreicht dieses Ziel erfolgreich, wodurch OpenSSL nicht nur eine Verschlüsselungsbibliothek ist, sondern eine universelle Verschlüsselungsschnittstelle bereitstellt, die mit den meisten Verschlüsselungsbibliotheken oder Verschlüsselungsgeräten koordiniert werden kann. Damit eine bestimmte Verschlüsselungsbibliothek oder ein bestimmtes Verschlüsselungsgerät mit OpenSSL funktioniert, müssen Sie natürlich eine kleine Menge Schnittstellencode schreiben, aber der Arbeitsaufwand ist nicht groß, obwohl dennoch ein wenig Wissen über Kryptografie erforderlich ist. Die Funktion des Engine-Mechanismus ist grundsätzlich dieselbe wie die von Windows bereitgestellte CSP-Funktion. Derzeit unterstützt OpenSSL Version 0.9.7 acht Arten eingebetteter Verschlüsselungsgeräte von Drittanbietern, darunter: CryptoSwift, nCipher, Atalla, Nuron, UBSEC, Aep, SureWare und IBM 4758 CCA-Hardwareverschlüsselungsgeräte. Jetzt gibt es eine Engine-Schnittstelle, die die PKCS#11-Schnittstelle unterstützt, und jemand entwickelt auch eine Schnittstelle, die Microsoft CryptoAPI unterstützt. Natürlich ist die Unterstützung für alle oben genannten Engine-Schnittstellen möglicherweise nicht umfassend. Beispielsweise werden möglicherweise ein oder zwei Public-Key-Algorithmen unterstützt.
8. Hilfsfunktionen
Der BIO-Mechanismus ist eine von OpenSSL bereitgestellte High-Level-IO-Schnittstelle. Diese Schnittstelle kapselt fast alle Arten von IO-Schnittstellen, wie z. B. Speicherzugriff, Dateizugriff, Socket usw. Dies verbessert die Wiederverwendbarkeit von Code erheblich und verringert die Komplexität der von OpenSSL bereitgestellten API.
OpenSSL bietet außerdem einen vollständigen Satz an Lösungen und unterstützenden API-Funktionen für die Generierung und Verwaltung von Zufallszahlen. Die Qualität von Zufallszahlen ist eine wichtige Voraussetzung für die Feststellung, ob ein Schlüssel sicher ist.
OpenSSL bietet auch andere Hilfsfunktionen, wie die API zum Generieren von Schlüsseln aus Passwörtern, den Konfigurationsdatei-Mechanismus für die Ausstellung und Verwaltung von Zertifikaten usw. Wenn Sie geduldig genug sind, werden Sie bei der intensiven Nutzung von OpenSSL nach und nach viele solcher kleinen Funktionen entdecken und immer wieder neue Überraschungen erleben.

Dieser Artikel stellt hauptsächlich die auf OpenSSL basierende Verschlüsselungs- und Entschlüsselungsmethode in PHP vor und analysiert die verwandten Techniken von PHPbenutzerdefinierten FunktionenImplementierung der auf OpenSSL basierenden Verschlüsselung und Entschlüsselung in Form von Beispielen Wer es braucht, kann als Referenz

Das Beispiel in diesem Artikel beschreibt die auf OpenSSL basierende Verschlüsselungs- und Entschlüsselungsmethode in PHP. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Verschlüsselungs- und Entschlüsselungsmethode durch OpenSSL

1.

function encrypt($id){
  $id=serialize($id);
  $key="1112121212121212121212";
  $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16));
  $data['value']=openssl_encrypt($id, 'AES-256-CBC',$key,0,base64_decode($data['iv']));
  $encrypt=base64_encode(json_encode($data));
  return $encrypt;
}

2. OpenSSL-Entschlüsselungsmethode:

function decrypt($encrypt)
{
  $key = '1112121212121212121212';//解密钥匙
  $encrypt = json_decode(base64_decode($encrypt), true);
  $iv = base64_decode($encrypt['iv']);
  $decrypt = openssl_decrypt($encrypt['value'], 'AES-256-CBC', $key, 0, $iv);
  $id = unserialize($decrypt);
  if($id){
    return $id;
  }else{
    return 0;
  }
}

Das obige ist der detaillierte Inhalt vonPHP-Verschlüsselungs- und Entschlüsselungsmethode basierend auf OpenSSL. 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