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 相关文章推荐
在PHP中利用XML技术构造远程服务(下)
Oct 09 PHP
PHP中Date()时间日期函数的使用方法小结
Apr 20 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
php二维数组排序与默认自然排序的方法介绍
Apr 27 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
PHP处理二进制数据的实现方法
Jun 13 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
使用YII2框架实现微信公众号中表单提交功能
Sep 04 PHP
laravel 实现向公共模板中传值 (view composer)
Oct 22 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上传图片之时间戳命名(保存路径)
2014/08/15 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
2017/05/17 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
使用 Element UI Table 的 slot-scope方法
2019/10/10 Javascript
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
Python PIL图片添加字体的例子
2019/08/22 Python
pandas-resample按时间聚合实例
2019/12/27 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
科室工作个人总结的自我评价
2013/10/29 职场文书
创业女性典型材料
2014/05/02 职场文书
教师教学评估方案
2014/05/09 职场文书
软弱涣散基层党组织整改方案
2014/10/25 职场文书
道德模范事迹材料
2014/12/20 职场文书
企业投资意向书
2015/05/09 职场文书
教师考核鉴定意见
2015/06/05 职场文书
西柏坡观后感
2015/06/08 职场文书