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
Jun 29 PHP
用Zend Encode编写开发PHP程序
Feb 21 PHP
分享php分页的功能模块
Jun 16 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
PHP Web表单生成器案例分析
Jun 02 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
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
jQuery Dialog 弹出层对话框插件
2010/08/09 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
javascript从右边截取指定字符串的三种实现方法
2013/11/29 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
vue router 配置路由的方法
2018/07/26 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
Python入门篇之字符串
2014/10/17 Python
python程序封装为win32服务的方法
2021/03/07 Python
python重试装饰器的简单实现方法
2019/01/31 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
python实现批处理文件
2020/07/28 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
档案接收函
2014/01/13 职场文书
地球物理学专业推荐信
2014/09/08 职场文书
考试作弊检讨书1000字(5篇)
2014/10/19 职场文书
师德标兵先进事迹材料
2014/12/19 职场文书
心术观后感
2015/06/11 职场文书
2016年元旦致辞
2015/08/01 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
初中历史教学反思
2016/02/19 职场文书
为什么mysql字段要使用NOT NULL
2021/05/13 MySQL
python实现会员管理系统
2022/03/18 Python
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang