Maison > Article > développement back-end > Posture d'utilisation correcte du chiffrement et du décryptage DES en php
Avant-propos : Dans le développement quotidien, nous chiffrons souvent les caractères clés, soit pour des raisons de sécurité, soit pour des raisons de standardisation. Aujourd'hui, nous allons découvrir l'utilisation correcte du cryptage DES
Organigramme des tâches
Fragment 1
Faites-le, j'ai commencé à écrire le code de cryptage comme suitclass 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 ); } }Code de test
<?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>';Effet
原字符是podsmia 加密后的字符是9490E64136137FD8 解密后的字符是podsmiaAprès quelques jours, je n'avais plus rien à faire, continuez exécutez le code
Obsolète : les méthodes portant le même nom que leur classe ne seront pas des constructeurs dans une future version de PHP ; DES5 a un constructeur obsolète dans D:phpstudy_proWWWdesDES5.php à la ligne 2Le caractère original est podsmia
Erreur fatale : Erreur non détectée : Appel à la fonction non définie mcrypt_get_block_size() dans D:phpstudy_proWWWdesDES5.php:19 Trace de pile : #0 D:phpstudy_proWWWdes1 . php(10): DES5->encrypt('podsmia') #1 {main} lancé dans D:phpstudy_proWWWdesDES5.php à la ligne 19m'a signalé une erreur fatale. ne bouge rien. Que se passe-t-il? Après quelques recherches plus tard. Il a été constaté qu'il s'agissait d'un problème avec la version php. Je l'ai exécuté avec succès auparavant parce que j'utilisais php5.5, mais cette fois j'ai eu une erreur et j'utilisais php7.2. Ensuite, je dois trouver une alternative. . Ensuite, regardez-moi opérer
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); } }Code de test
<?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>';Effet
原字符是问哪个 加密后的字符是074b8beee21eefca7ec3a60cb8edda18 解密后的字符是问哪个Problème parfaitement résolu. Si vous rencontrez ce genre de problème à l'avenir, vous pouvez simplement copier mon code, ce qui est pratique et sans problème. Pour plus de connaissances sur PHP, veuillez visiter le
Tutoriel PHP !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!