Maison >développement back-end >tutoriel php >Méthode complète de classe d'encapsulation de cryptage et de décryptage DES implémentée en PHP

Méthode complète de classe d'encapsulation de cryptage et de décryptage DES implémentée en PHP

墨辰丷
墨辰丷original
2018-05-23 11:41:052019parcourir

Cet article présente principalement la classe d'empaquetage de cryptage et de décryptage DES implémentée par PHP. Il analyse les compétences de définition et d'utilisation de la classe d'empaquetage de cryptage et de décryptage PHP DES sous la forme d'un exemple complet. Les amis dans le besoin peuvent se référer aux exemples. dans cet article

Décrit la classe d'empaquetage de cryptage et de décryptage DES implémentée par PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

<?php
/**
* PHP版DES加解密类
* 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容
*
*/
class CryptDes {
   var $key;
   var $iv;
   function CryptDes($key, $iv){
    $this->key = $key;
    $this->iv = $iv;
   }
   function encrypt($input){
     $size = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); //3DES加密将MCRYPT_DES改为MCRYPT_3DES
     $input = $this->pkcs5_pad($input, $size); //如果采用PaddingPKCS7,请更换成PaddingPKCS7方法。
     $key = str_pad($this->key,8,&#39;0&#39;); //3DES加密将8改为24
     $td = mcrypt_module_open(MCRYPT_DES, &#39;&#39;, MCRYPT_MODE_CBC, &#39;&#39;);
     if( $this->iv == &#39;&#39; )
     {
       $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
     }
     else
     {
       $iv = $this->iv;
     }
     @mcrypt_generic_init($td, $key, $iv);
     $data = mcrypt_generic($td, $input);
     mcrypt_generic_deinit($td);
     mcrypt_module_close($td);
     $data = base64_encode($data);//如需转换二进制可改成 bin2hex 转换
     return $data;
   }
   function decrypt($encrypted){
     $encrypted = base64_decode($encrypted); //如需转换二进制可改成 bin2hex 转换
     $key = str_pad($this->key,8,&#39;0&#39;); //3DES加密将8改为24
     $td = mcrypt_module_open(MCRYPT_DES,&#39;&#39;,MCRYPT_MODE_CBC,&#39;&#39;);//3DES加密将MCRYPT_DES改为MCRYPT_3DES
     if( $this->iv == &#39;&#39; )
     {
       $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
     }
     else
     {
       $iv = $this->iv;
     }
     $ks = mcrypt_enc_get_key_size($td);
     @mcrypt_generic_init($td, $key, $iv);
     $decrypted = mdecrypt_generic($td, $encrypted);
     mcrypt_generic_deinit($td);
     mcrypt_module_close($td);
     $y=$this->pkcs5_unpad($decrypted);
     return $y;
   }
   function pkcs5_pad ($text, $blocksize) {
     $pad = $blocksize - (strlen($text) % $blocksize);
     return $text . str_repeat(chr($pad), $pad);
   }
   function pkcs5_unpad($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);
   }
   function PaddingPKCS7($data) {
     $block_size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);//3DES加密将MCRYPT_DES改为MCRYPT_3DES
     $padding_char = $block_size - (strlen($data) % $block_size);
     $data .= str_repeat(chr($padding_char),$padding_char);
     return $data;
   }
}
$des = new CryptDes("12345678","12345678");//(秘钥向量,混淆向量)
echo $ret = $des->encrypt("1111");//加密字符串
?>

Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il le sera utile à l’étude de chacun.


Recommandations associées :

13PHPles fonctions sont des compétences super pratiques_javascript

Un problème de temps d'affichage en temps réel php+js_compétences javascript

jQuery+PHP+Explication du menu déroulant de liaison secondaire MySQL _jquery

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn