为了账号安全,请及时绑定邮箱和手机立即绑定

PHP DES加密解密封装类

标签:
PHP

<?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,'0'); //3DES加密将8改为24

         $td = mcrypt_module_open(MCRYPT_DES, '', MCRYPT_MODE_CBC, '');

         if( $this->iv == '' )

         {

             $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,'0'); //3DES加密将8改为24

         $td = mcrypt_module_open(MCRYPT_DES,'',MCRYPT_MODE_CBC,'');//3DES加密将MCRYPT_DES改为MCRYPT_3DES

          if( $this->iv == '' )

         {

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

?>

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消