Achtung: Vermeiden Sie die Verschlüsselung von Passwörtern mit diesen Methoden; Verwenden Sie stattdessen Passwort-Hashing-Algorithmen für eine sichere Passwortspeicherung.
Wenn Sie PHP 5.4 oder höher verwenden und Codeportabilität wünschen, nutzen Sie eine vorhandene Bibliothek, die authentifizierte Verschlüsselung bietet. Openssl-Methoden wie openssl_encrypt() und openssl_decrypt() können verwendet werden, sobald Sie eine Verschlüsselungsmethode ausgewählt haben.
Erwägen Sie die Verwendung des Advanced Encryption Standard (AES) in CTR-Modus zur Verschlüsselung. Diese Methode bietet die beste Balance zwischen Sicherheit und Leistung. Konsultieren Sie openssl_get_cipher_methods() für eine Liste der unterstützten Methoden.
Die folgende PHP-Klasse bietet einen einfachen Verschlüsselungs-/Entschlüsselungs-Wrapper mit OpenSSL:
class UnsafeCrypto { const METHOD = 'aes-256-ctr'; public static function encrypt($message, $key, $encode = false) { // ... if ($encode) { return base64_encode($nonce.$ciphertext); } return $nonce.$ciphertext; } public static function decrypt($message, $key, $encoded = false) { // ... $plaintext = openssl_decrypt( $ciphertext, self::METHOD, $key, OPENSSL_RAW_DATA, $nonce ); return $plaintext; } }
Um die Sicherheit zu erhöhen, implementieren Sie die Authentifizierung für Überprüfen Sie die Integrität verschlüsselter Daten:
class SaferCrypto extends UnsafeCrypto { const HASH_ALGO = 'sha256'; public static function encrypt($message, $key, $encode = false) { // ... if ($encode) { return base64_encode($mac.$ciphertext); } // Prepend MAC to the ciphertext and return to caller return $mac.$ciphertext; } public static function decrypt($message, $key, $encoded = false) { // ... $calculated = hash_hmac( self::HASH_ALGO, $ciphertext, $authKey, true ); if (!self::hashEquals($mac, $calculated)) { throw new Exception('Encryption failure'); } // Pass to UnsafeCrypto::decrypt $plaintext = parent::decrypt($ciphertext, $encKey); return $plaintext; } }
Das obige ist der detaillierte Inhalt vonWie kann ich eine einfache bidirektionale Verschlüsselung und Authentifizierung in PHP implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!