Maison >développement back-end >tutoriel php >Classe d'empaquetage de chiffrement et de déchiffrement DES implémentée en PHP

Classe d'empaquetage de chiffrement et de déchiffrement DES implémentée en PHP

不言
不言original
2018-06-02 11:30:111433parcourir

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 chiffrement et de décryptage DES implémentée par PHP. Partagez-le avec tout le monde pour votre référence, comme suit :

<?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");//加密字符串
?>

Recommandations associées :

Statistiques de PHP mise en œuvre Explication détaillée des fonctions de données

Exemple d'outil d'indexation d'analyse d'annuaire de sites Web basé sur 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!

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