分享

PHP DES/3DES加密解密

 mrjbydd 2013-10-28
<?php
 /**
  *@param  DES/3DES加密解密    
  *@param  如果是3des,将MCRYPT_DES修改为MCRYPT_3DES,个人笔记
  */
 class DesCrypt{
     var $key   = '';
     var $deviceid   = '';
     var $user   = '';
     var $lsh   = '';
     var $cipherText = '';
     var $HcipherText = '';
     var $decrypted_data ='';
 
     function DesCrypt(){
     }
     //加密
     function en($str)
     {
         $cipher = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');
         $iv     = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB), MCRYPT_RAND);
 
         if (mcrypt_generic_init($cipher, substr($this->key,0,8), $iv) != -1)
         {
             $this->cipherText = mcrypt_generic($cipher,$this->pad($str));
             mcrypt_generic_deinit($cipher);
             // 以十六进制字符显示加密后的字符
             $this->HcipherText=bin2hex($this->cipherText);
             printf("<p>3DES encrypted:\n%s</p>",$this->cipherText);
             printf("<p>3DES HexEncrypted:\n%s</p>",$this->HcipherText);
         }
         mcrypt_module_close($cipher);
         return $this->cipherText;
     } 
  //解密
     function de($str)
     {
         $str    = pack('H*', $str);
         $cipher = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_ECB, '');
         $iv     = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB), MCRYPT_RAND);
         if (mcrypt_generic_init($cipher, substr($this->key,0,8), $iv) != -1)
         {
             $this->decrypted_data = mdecrypt_generic($cipher,$str);
             mcrypt_generic_deinit($cipher);
         }
         mcrypt_module_close($cipher);
         return $this->unpad($this->decrypted_data);
     }
 
     private function pad ($data)
     {
         $data = str_replace("\n","",$data);
         $data = str_replace("\t","",$data);
         $data = str_replace("\r","",$data);
         return $data;
     }
 
     private function 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);
 
     }
 };
 ?>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约