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 ); } }
<?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>';
原字符是podsmia 加密后的字符是9490E64136137FD8 解密后的字符是podsmia
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); } }
<?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>';
原字符是问哪个 加密后的字符是074b8beee21eefca7ec3a60cb8edda18 解密后的字符是问哪个
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!