Heim > Artikel > Backend-Entwicklung > So implementieren Sie die Verschlüsselung und Entschlüsselung in PHP
In PHP kann die Mcrypt-Funktionsreihe zum Implementieren der DES-Verschlüsselung und -Entschlüsselung verwendet werden. Die Funktionen in dieser Erweiterung wurden jedoch nach und nach aufgegeben, sodass wir die allgemeine OPENSSL-Methode zum Implementieren der DES-Verschlüsselung und -Entschlüsselung verwenden können.
Empfohlen: „PHP-Video-Tutorial“
Detaillierte Erklärung der DES-Verschlüsselung und -Entschlüsselung in PHP
1. Einführung
DES ist eine häufige Art der symmetrischen Verschlüsselung und ihr vollständiger Name ist Data Encryption Standard. Der Data Encryption Standard ist ein Blockalgorithmus, der Schlüsselverschlüsselung verwendet. Die Schlüssellänge beträgt 64 Bit (Bit) und der Schlüssel, der die Anzahl der Bits überschreitet, wird ignoriert. Die sogenannte symmetrische Verschlüsselung bedeutet, dass die Verschlüsselungs- und Entschlüsselungsschlüssel gleich sind. Bei der symmetrischen Verschlüsselung wird die zu verschlüsselnde Zeichenfolge im Allgemeinen entsprechend einer festen Länge in Blöcke unterteilt, die kleiner als ein ganzer Block ist, oder es gibt ein spezielles Füllzeichen Ende.
Bei der sprachübergreifenden DES-Verschlüsselung und -Entschlüsselung treten häufig Probleme auf, die häufig durch falsche Auffüllmethoden, inkonsistente Codierung oder nicht übereinstimmende Verschlüsselungs- und Entschlüsselungsmodi verursacht werden. Gängige Füllmodi sind: pkcs5, pkcs7, iso10126, ansix923, null. Zu den Verschlüsselungsmodi gehören: DES-ECB, DES-CBC, DES-CTR, DES-OFB und DES-CFB.
Als Softwareentwickler können Sie die DES-Verschlüsselung und -Entschlüsselung mithilfe von Tools testen. Hier wird ein Online-Tool empfohlen: http://tool.chacuo.net/cryptdes
2 Implementierung
PHP stellt die Mcrypt-Serie bereit Funktionen zur Implementierung der DES-Verschlüsselung und -Entschlüsselung, aber die Funktionen in dieser Erweiterung werden nach und nach aufgegeben. Ab PHP 7.2.0 werden sie auf PECL verschoben.
Dieser Code verwendet also die allgemeinere OPENSSL-Methode zur Implementierung der DES-Verschlüsselung und -Entschlüsselung. Der spezifische Implementierungs- und Verwendungscode lautet wie folgt:
<?php /** * openssl 实现的 DES 加密类,支持各种 PHP 版本 */ class DES { /** * @var string $method 加解密方法,可通过 openssl_get_cipher_methods() 获得 */ protected $method; /** * @var string $key 加解密的密钥 */ protected $key; /** * @var string $output 输出格式 无、base64、hex */ protected $output; /** * @var string $iv 加解密的向量 */ protected $iv; /** * @var string $options */ protected $options; // output 的类型 const OUTPUT_NULL = ''; const OUTPUT_BASE64 = 'base64'; const OUTPUT_HEX = 'hex'; /** * DES constructor. * @param string $key * @param string $method * ECB DES-ECB、DES-EDE3 (为 ECB 模式时,$iv 为空即可) * CBC DES-CBC、DES-EDE3-CBC、DESX-CBC * CFB DES-CFB8、DES-EDE3-CFB8 * CTR * OFB * * @param string $output * base64、hex * * @param string $iv * @param int $options */ public function __construct($key, $method = 'DES-ECB', $output = '', $iv = '', $options = OPENSSL_RAW_DATA | OPENSSL_NO_PADDING) { $this->key = $key; $this->method = $method; $this->output = $output; $this->iv = $iv; $this->options = $options; } /** * 加密 * * @param $str * @return string */ public function encrypt($str) { $str = $this->pkcsPadding($str, 8); $sign = openssl_encrypt($str, $this->method, $this->key, $this->options, $this->iv); if ($this->output == self::OUTPUT_BASE64) { $sign = base64_encode($sign); } else if ($this->output == self::OUTPUT_HEX) { $sign = bin2hex($sign); } return $sign; } /** * 解密 * * @param $encrypted * @return string */ public function decrypt($encrypted) { if ($this->output == self::OUTPUT_BASE64) { $encrypted = base64_decode($encrypted); } else if ($this->output == self::OUTPUT_HEX) { $encrypted = hex2bin($encrypted); } $sign = @openssl_decrypt($encrypted, $this->method, $this->key, $this->options, $this->iv); $sign = $this->unPkcsPadding($sign); $sign = rtrim($sign); return $sign; } /** * 填充 * * @param $str * @param $blocksize * @return string */ private function pkcsPadding($str, $blocksize) { $pad = $blocksize - (strlen($str) % $blocksize); return $str . str_repeat(chr($pad), $pad); } /** * 去填充 * * @param $str * @return string */ private function unPkcsPadding($str) { $pad = ord($str{strlen($str) - 1}); if ($pad > strlen($str)) { return false; } return substr($str, 0, -1 * $pad); } } $key = 'key123456'; $iv = 'iv123456'; // DES CBC 加解密 $des = new DES($key, 'DES-CBC', DES::OUTPUT_BASE64, $iv); echo $base64Sign = $des->encrypt('Hello DES CBC'); echo "\n"; echo $des->decrypt($base64Sign); echo "\n"; // DES ECB 加解密 $des = new DES($key, 'DES-ECB', DES::OUTPUT_HEX); echo $base64Sign = $des->encrypt('Hello DES ECB'); echo "\n"; echo $des->decrypt($base64Sign);
3. Verwandte Links
DES-Verschlüsselungs- und Entschlüsselungstool: http://tool. chacuo.net /cryptdes
Mcrypt offizielle Dokumentation: http://php.net/manual/zh/book.mcrypt.php
OPENSSL Verschlüsselungs- und Entschlüsselungsfunktion offizielle Dokumentation:
openssl_encrypt: http://php.net/ Manual/zh/ function.openssl-encrypt.php
openssl_decrypt: http://php.net/manual/zh/function.openssl-decrypt.php
Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Verschlüsselung und Entschlüsselung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!