首頁 >php教程 >php手册 >php之3des加密解密

php之3des加密解密

WBOY
WBOY原創
2016-06-06 20:12:25970瀏覽

类文件 ?phpclass Crypt3Des { var $key; function Crypt3Des($key){ $this-key = $key; } function encrypt($input){ $size = mcrypt_get_block_size(MCRYPT_3DES,'ecb'); $input = $this-pkcs5_pad($input, $size); $key = str_pad($this-key,24,'0'); $td

类文件

<?php class Crypt3Des {      
     var $key;     
     function Crypt3Des($key){          
    $this->key = $key;
     }
     function encrypt($input){
         $size = mcrypt_get_block_size(MCRYPT_3DES,'ecb');  
         $input = $this->pkcs5_pad($input, $size);  
         $key = str_pad($this->key,24,'0');  
         $td = mcrypt_module_open(MCRYPT_3DES, '', 'ecb', '');  
         $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);  
         @mcrypt_generic_init($td, $key, $iv);  
         $data = mcrypt_generic($td, $input);  
         mcrypt_generic_deinit($td);  
         mcrypt_module_close($td);  
         //    $data = base64_encode($this->PaddingPKCS7($data)); 
         $data = base64_encode($data);
              return $data;  
     }          
     function decrypt($encrypted){
         $encrypted = base64_decode($encrypted);  
         $key = str_pad($this->key,24,'0');  
         $td = mcrypt_module_open(MCRYPT_3DES,'','ecb','');
         $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);
         $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_3DES, MCRYPT_MODE_CBC);
         $padding_char = $block_size - (strlen($data) % $block_size);
         $data .= str_repeat(chr($padding_char),$padding_char);
         return $data;
     } 
}

用法:

$crypt = new Crypt3Des('密钥');
$a = '待加密字符串';
$code = $crypt->encrypt($a);//加密
echo $crypt->decrypt($code);//解密
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn