Heim  >  Artikel  >  Backend-Entwicklung  >  Wie verschlüssele und entschlüssele ich in PHP? PHP-Verschlüsselungs- und Entschlüsselungsmethoden

Wie verschlüssele und entschlüssele ich in PHP? PHP-Verschlüsselungs- und Entschlüsselungsmethoden

青灯夜游
青灯夜游nach vorne
2018-11-22 13:54:328463Durchsuche

Der Inhalt dieses Artikels besteht darin, vorzustellen, wie man in PHP verschlüsselt und entschlüsselt. PHP-Verschlüsselungs- und Entschlüsselungsmethoden. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Um die Sicherheit der Netzwerkübertragungsdaten, einschließlich der Übertragung sensibler Daten, zu gewährleisten, ist es am besten, die Daten vor der Übertragung im Netzwerk vorab zu verschlüsseln. Stellen Sie dies gleichzeitig sicher Die Daten sind am anderen Ende entschlüsselt und müssen über einen Schlüssel (öffentlicher Schlüssel oder privater Schlüssel) entschlüsselt werden, selbst wenn sie die verschlüsselten Daten erhalten.

In diesem Artikel wird hauptsächlich der AES-Verschlüsselungsalgorithmus bei der symmetrischen Verschlüsselung vorgestellt; der RSA-Verschlüsselungsalgorithmus bei der asymmetrischen Verschlüsselung. [Empfohlene verwandte Video-Tutorials: PHP-Tutorial]

1. Symmetrische Verschlüsselung

Verschlüsselung mit einem Einzelschlüssel-Kryptografiesystem Bei dieser Methode kann derselbe Schlüssel sowohl für die Verschlüsselung als auch für die Entschlüsselung von Informationen verwendet werden. Diese Verschlüsselungsmethode wird als symmetrische Verschlüsselung bezeichnet, die auch als Einzelschlüsselverschlüsselung bezeichnet wird.

Zu den häufig verwendeten Algorithmen in symmetrischen Verschlüsselungsalgorithmen gehören: DES, 3DES, TDEA, Blowfish, RC2, RC4, RC5, IDEA, SKIPJACK, AES usw.

AES-Verschlüsselungsalgorithmus

Advanced Encryption Standard (AES) in der Kryptographie, auch bekannt als Rijndael-Verschlüsselungsmethode, ist ein amerikanischer A-Block-Verschlüsselungsstandard von der Bundesregierung verabschiedet. Dieser Standard ersetzt den ursprünglichen DES. Er wurde von vielen Parteien analysiert und ist weltweit weit verbreitet. Im Jahr 2006 hat sich Advanced Encryption Standard zu einem der beliebtesten Algorithmen für die Verschlüsselung mit symmetrischen Schlüsseln entwickelt.

Die OpenSSL-Erweiterung von PHP hat den AES-Verschlüsselungsalgorithmus implementiert. Wir können Daten mit den von der OpenSSL-Erweiterung bereitgestellten Methoden verschlüsseln und entschlüsseln. PHP hat die MCrypt-Verschlüsselung in Version 7.2 vollständig entfernt und das PHP-Handbuch wurde in 7.1 migriert Die Seite bietet eine Alternative, nämlich die Verwendung von OpenSSL als Ersatz für MCrypt

PHP AES-Implementierung (Verschlüsselung, Entschlüsselung)

PHP-Implementierungscode:

class AES
{
    //设置AES秘钥
    private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥

    /**
     * 加密
     * @param string $str    要加密的数据
     * @return bool|string   加密后的数据
     */
    static public function encrypt($str) {

        $data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        $data = base64_encode($data);

        return $data;
    }

    /**
     * 解密
     * @param string $str    要解密的数据
     * @return string        解密后的数据
     */
    static public function decrypt($str) {

        $decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
        return $decrypted;
    }
}

2. Asymmetrische Verschlüsselung

Der symmetrische Verschlüsselungsalgorithmus verwendet denselben geheimen Schlüssel für die Verschlüsselung und Entschlüsselung Zwei geheime Schlüssel sind der öffentliche Schlüssel (kurz: öffentlicher Schlüssel) und der private Schlüssel (kurz: privater Schlüssel).

Die wichtigsten Algorithmen, die bei der asymmetrischen Verschlüsselung verwendet werden, sind: RSA, Elgamal, Rucksackalgorithmus, Rabin, D-H, ECC (Elliptic-Curve-Cryptography-Algorithmus) usw.

RSA-Verschlüsselungsalgorithmus

RSA ist derzeit der einflussreichste Public-Key-Verschlüsselungsalgorithmus, der auf einer sehr einfachen Tatsache der Zahlentheorie basiert: Multiplikation zwei große Primzahlen ist einfach, aber die Faktorisierung ihres Produkts ist äußerst schwierig, sodass das Produkt als Verschlüsselungsschlüssel, der öffentliche Schlüssel, offengelegt werden kann und die beiden großen Primzahlen kombiniert werden, um den privaten Schlüssel zu bilden. Der öffentliche Schlüssel kann von jedermann verwendet werden und der private Schlüssel gehört Ihnen zur Entschlüsselung.

Der Entschlüsseler ist Eigentümer des privaten Schlüssels und gibt den durch die Berechnung des privaten Schlüssels generierten öffentlichen Schlüssel an den Verschlüsseler weiter. Bei der Verschlüsselung wird der Chiffretext mit dem öffentlichen Schlüssel verschlüsselt und an den Entschlüsseler gesendet, der den Chiffretext mit dem privaten Schlüssel in Klartext entschlüsselt.

Angenommen, A möchte beispielsweise Informationen an B senden. Bestimmen Sie zunächst die Rollen: A ist der Verschlüsseler und B ist der Entschlüsseler. Zuerst bestimmt B zufällig einen SCHLÜSSEL, einen sogenannten geheimen Schlüssel, und behält diesen SCHLÜSSEL in Maschine B, ohne ihn auszusenden. Anschließend berechnet er aus diesem SCHLÜSSEL einen weiteren SCHLÜSSEL, einen sogenannten öffentlichen Schlüssel. Die Eigenschaft dieses öffentlichen Schlüssels besteht darin, dass es nahezu unmöglich ist, den privaten Schlüssel, der ihn generiert hat, allein zu berechnen. Als nächstes wird der öffentliche Schlüssel über das Netzwerk an A übertragen. Nachdem A den öffentlichen Schlüssel erhalten hat, verschlüsselt er die Informationen und sendet den Chiffretext über das Netzwerk an B. Schließlich verwendet B den bekannten privaten Schlüssel, um die Informationen zu verschlüsseln Chiffretext. Das Obige ist der Arbeitsablauf des RSA-Algorithmus.

Der Algorithmusimplementierungsprozess ist:

  1. Wählen Sie zufällig zwei große Primzahlen p und q aus, p ist nicht gleich q, und berechnen Sie N =pq.

  2. Gemäß der Euler-Funktion ist die Anzahl der ganzen Zahlen, die nicht größer als N und teilerfremd zu N sind, (p-1)(q-1).

  3. Wählen Sie eine ganze Zahl e, die teilerfremd mit (p-1)(q-1) ist und e kleiner als (p-1)(q-1) ist.

  4. Verwenden Sie die folgende Formel, um d zu berechnen: d× e ≡ 1 (mod (p-1)(q-1)).

  5. Zerstören Sie die Aufzeichnungen von p und q.

Im obigen Inhalt ist (N, e) der öffentliche Schlüssel und (N, d) der private Schlüssel.

Private und öffentliche Schlüssel generieren

Private Schlüsseldatei generieren:

openssl genrsa -out rsa_private_key.pem 1024

Privaten Schlüssel verwenden, um öffentlichen Schlüssel zu generieren:

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

Daten können durch die generierten öffentlichen und privaten Schlüssel verschlüsselt und entschlüsselt werden:

PHP RSA-Implementierung (Verschlüsselung, Entschlüsselung)

PHP-Implementierungscode (Verschlüsselung mit öffentlichem Schlüssel, privater Schlüssel Entschlüsselung):

class RSA
{
    /**
     * @param string $str 要加密的数据
     * @param string $public_key 公钥
     * @return string
     */
    static public function encrypt($str, $public_key) {

        $encrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密

        $encrypted = base64_encode($encrypted);

        return $encrypted;
    }

    /**
     * 解密
     * @param string $str 要解密的数据
     * @param string $private_key 私钥
     * @return string
     */
    static public function decrypt($str, $private_key) {

        $decrypted = '';
        $pi_key =  openssl_pkey_get_private($private_key);
        openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密

        return $decrypted;
    }
}

PHP-Implementierungscode (Verschlüsselung mit privatem Schlüssel und Entschlüsselung mit öffentlichem Schlüssel):

class RSA
{
    //私钥加密 
    static public function encrypt($str, private_key) {

        $encrypted = '';
        $pi_key = openssl_pkey_get_private($private_key);
        openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密
        
        $encrypted = base64_encode($encrypted);
        
        return $encrypted;
    }
    //公钥解密
    static public function decrypt($str, $public_key) {

        $decrypted = '';
        $pu_key = openssl_pkey_get_public($public_key);
        openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密
        
        return $decrypted;
    }
}

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für alle nützlich sein kann Lernen.

Das obige ist der detaillierte Inhalt vonWie verschlüssele und entschlüssele ich in PHP? PHP-Verschlüsselungs- und Entschlüsselungsmethoden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen