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编程开发“虚拟域名”系统
Oct 09 PHP
php Mysql日期和时间函数集合
Nov 16 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
php下使用curl模拟用户登陆的代码
Sep 10 PHP
php算开始时间到过期时间的相隔的天数
Jan 12 PHP
php设计模式 Proxy (代理模式)
Jun 26 PHP
php计算十二星座的函数代码
Aug 21 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
php实现面包屑导航例子分享
Dec 19 PHP
PHP中的访问修饰符简单比较
Feb 02 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 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转换为数组
2010/01/01 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
php使用codebase生成随机数
2014/03/25 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
jquery禁用右键示例
2014/04/28 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
2018/10/22 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
python文件比较示例分享
2014/01/10 Python
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
python实现京东秒杀功能
2018/07/30 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
django 模型中的计算字段实例
2020/05/19 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
幼儿园教师工作感言
2014/02/15 职场文书
拉歌口号大全
2014/06/13 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
幸福终点站观后感
2015/06/04 职场文书
创业计划书之酒店
2019/08/30 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL