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 相关文章推荐
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
May 28 PHP
用sql命令修改数据表中的一个字段为非空(not null)的语句
Jun 04 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
php上传图片客户端和服务器端实现方法
Mar 30 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
php7 安装yar 生成docker镜像
May 09 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
php根据命令行参数生成配置文件详解
Mar 15 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
跟我学Laravel之请求与输入
2014/10/15 PHP
PHP结合Mysql数据库实现留言板功能
2016/03/04 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
JS实现图片无间断滚动代码汇总
2014/07/30 Javascript
jQuery图片特效插件Revealing实现拉伸放大
2015/04/22 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
Python读取properties配置文件操作示例
2018/03/29 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
2019/03/30 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
Python中函数的返回值示例浅析
2019/08/28 Python
巴西购物网站:Estrela10
2018/12/13 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
政治表现评语
2014/05/04 职场文书
鉴定评语大全
2014/05/05 职场文书
环保倡议书怎么写
2014/05/16 职场文书
网站推广策划方案
2014/06/04 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
药房管理制度范本
2015/08/06 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书