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 相关文章推荐
一个程序下载的管理程序(三)
Oct 09 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
php 保留小数点
Apr 21 PHP
ThinkPHP自动验证失败的解决方法
Jun 09 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
php二维码生成以及下载实现
Sep 28 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 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与MySQL交互使用详解
2006/10/09 PHP
php5 and xml示例
2006/11/22 PHP
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
js 只比较时间大小的实例
2017/10/26 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
python添加模块搜索路径方法
2017/09/11 Python
python实现简单点对点(p2p)聊天
2017/09/13 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
请解释在new与override的区别
2012/10/29 面试题
2014年会演讲稿范文
2014/01/06 职场文书
校园十大歌手策划书
2014/02/01 职场文书
关于责任的演讲稿
2014/05/20 职场文书
公司年终奖分配方案
2014/06/16 职场文书
与美同行演讲稿
2014/09/13 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
物业公司管理制度
2015/08/05 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis