Vorwort: In der täglichen Entwicklung verschlüsseln wir häufig Schlüsselzeichen, entweder aus Sicherheitsgründen oder zur Standardisierung. Heute erfahren Sie mehr über die korrekte Verwendung der DES-Verschlüsselung
Aufgabenflussdiagramm
Fragment 1
Mach es einfach, ich habe wie folgt angefangen, den Verschlüsselungscode zu schreiben
class DES { var $key; var $iv; //偏移量 function DES( $key, $iv=0 ) { //key长度8例如:1234abcd $this->key = $key; if( $iv == 0 ) { $this->iv = $key; } else { $this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM ); } } function encrypt($str) { //加密,返回大写十六进制字符串 $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC ); $str = $this->pkcs5Pad ( $str, $size ); return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) ); } function decrypt($str) { //解密 $strBin = $this->hex2bin( strtolower( $str ) ); $str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv ); $str = $this->pkcs5Unpad( $str ); return $str; } function hex2bin($hexData) { $binData = ""; for($i = 0; $i < strlen ( $hexData ); $i += 2) { $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) ); } return $binData; } function pkcs5Pad($text, $blocksize) { $pad = $blocksize - (strlen ( $text ) % $blocksize); return $text . str_repeat ( chr ( $pad ), $pad ); } function pkcs5Unpad($text) { $pad = ord ( $text {strlen ( $text ) - 1} ); if ($pad > strlen ( $text )) return false; if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad) return false; return substr ( $text, 0, - 1 * $pad ); } }
Testcode
<?php header("Content-type: text/html; charset=utf-8"); error_reporting(0); require "DES5.php"; // 秘钥 $key = 'MOxinrui'; $crypt = new DES5($key); $str = 'podsmia'; echo "原字符是".$str.'<br>'; $encrypt_str = $crypt->encrypt($str); echo "加密后的字符是".$encrypt_str.'<br>'; $decrypt_str= $crypt->decrypt($encrypt_str); echo "解密后的字符是".$decrypt_str.'<br>';
Wirkung
原字符是podsmia 加密后的字符是9490E64136137FD8 解密后的字符是podsmia
Nach ein paar Tagen hatte ich nichts mehr zu tun, mach weiter Führen Sie den Code aus
Veraltet: Methoden mit demselben Namen wie ihre Klasse werden in einer zukünftigen Version von PHP keine Konstruktoren mehr sein; DES5 hat einen veralteten Konstruktor in D:phpstudy_proWWWdesDES5.php in Zeile 2
Das ursprüngliche Zeichen ist podsmia
Schwerwiegender Fehler: Nicht erfasster Fehler: Aufruf der undefinierten Funktion mcrypt_get_block_size() in D:phpstudy_proWWWdesDES5.php:19 Stack-Trace: #0 D:phpstudy_proWWWdes1 . php(10): DES5->encrypt('podsmia') #1 {main} geworfen in D:phpstudy_proWWWdesDES5.php in Zeile 19
hat mir einen fatalen Fehler gemeldet Ich bewege nichts. Was ist los? Nach einiger Recherche später. Es wurde festgestellt, dass es sich um ein Problem mit der PHP-Version handelte. Ich habe es zuvor erfolgreich ausgeführt, weil ich PHP5.5 verwendet habe, aber dieses Mal bekam ich eine Fehlermeldung und ich habe PHP7.2 verwendet. Dann muss ich eine Alternative finden. . Schauen Sie mir als Nächstes zu, wie ich
Fragment 2
<?php class DES7 { //要改的加密 public function desEncrypt($str,$key) { $iv = $key; $data = openssl_encrypt($str,"DES-CBC",$key,OPENSSL_RAW_DATA,$iv); $data = strtolower(bin2hex($data)); return $data; } //要改的解密 public function desDecrypt($str,$key) { $iv = $key; return openssl_decrypt (hex2bin($str), 'DES-CBC', $key, OPENSSL_RAW_DATA,$iv); } }
Testcode
<?php header("Content-type: text/html; charset=utf-8"); //error_reporting(0); // 秘钥 require "DES7.php"; $key = 'MOxinrui'; $crypt = new DES7($key); $str = '问哪个'; echo "原字符是".$str.'<br>'; $encrypt_str = $crypt->desEncrypt($str,$key); echo "加密后的字符是".$encrypt_str.'<br>'; $decrypt_str= $crypt->desDecrypt($encrypt_str,$key); echo "解密后的字符是".$decrypt_str.'<br>';
Effekt
原字符是问哪个 加密后的字符是074b8beee21eefca7ec3a60cb8edda18 解密后的字符是问哪个
Problem perfekt gelöst. Wenn Sie in Zukunft auf ein solches Problem stoßen, können Sie einfach meinen Code kopieren, was praktisch und problemlos ist. Weitere PHP-Kenntnisse finden Sie im
PHP-Tutorial!
Das obige ist der detaillierte Inhalt vonKorrekter Nutzungsstatus der Verschlüsselung und Entschlüsselung DES in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!