PHP实现的DES加密解密封装类完整实例


Posted in PHP onApril 29, 2017

本文实例讲述了PHP实现的DES加密解密封装类。分享给大家供大家参考,具体如下:

<?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");//加密字符串
?>
PHP 相关文章推荐
实用函数10
Nov 08 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
php while循环得到循环次数
Oct 26 PHP
php汉字转拼音的示例
Feb 27 PHP
php函数与传递参数实例分析
Nov 15 PHP
php传值赋值和传地址赋值用法实例分析
Jun 20 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 27 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
php使用curl伪造浏览器访问操作示例
Sep 30 PHP
laravel5.6实现数值转换
Oct 23 PHP
PHP编程实现csv文件导入mysql数据库的方法
Apr 29 #PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 #PHP
PHP中Notice错误常见解决方法
Apr 28 #PHP
PHP实现查询手机归属地的方法详解
Apr 28 #PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 #PHP
PHP解决中文乱码
Apr 28 #PHP
PHP中常用的魔术方法
Apr 28 #PHP
You might like
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
javascript闭包的理解和实例
2010/08/12 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
原生javascript的ajax请求及后台PHP响应操作示例
2020/02/24 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
python实现哈希表
2014/02/07 Python
代码讲解Python对Windows服务进行监控
2018/02/11 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
高级编程求职信模板
2014/02/16 职场文书
集中整治工作方案
2014/05/01 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
无线电通信名词解释
2022/02/18 无线电
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技