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 相关文章推荐
source.php查看源文件
Dec 09 PHP
php 无法载入mysql扩展
Mar 12 PHP
php采集时被封ip的解决方法
Aug 29 PHP
PHP备份/还原MySQL数据库的代码
Jan 06 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
关于使用coreseek并为其做分页的介绍
Jun 21 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
zend framework重定向方法小结
May 28 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 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中利用XML技术构造远程服务(下)
2006/10/09 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
Yii入门教程之Yii安装及hello world
2014/11/25 PHP
php实现socket推送技术的示例
2017/12/20 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
2018/05/12 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
不安全的常用的js写法
2009/09/15 Javascript
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
Python定时器实例代码
2017/11/01 Python
numpy基础教程之np.linalg
2019/02/12 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
Django values()和value_list()的使用
2020/03/31 Python
PyInstaller运行原理及常用操作详解
2020/06/13 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
新闻学专业求职信
2014/07/28 职场文书
小学假期安全广播稿
2014/09/28 职场文书
停车场管理制度范本
2015/08/05 职场文书