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的中问验证码
Nov 25 PHP
深入Nginx + PHP 缓存详解
Jul 11 PHP
php利用单例模式实现日志处理类库
Feb 10 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
php中smarty区域循环的方法
Jun 11 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
Feb 19 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jquery怎样实现ajax联动框(一)
2013/03/08 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python使用cookie库操保存cookie详解
2014/03/03 Python
Python基于dom操作xml数据的方法示例
2018/05/12 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
2019/08/02 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
2014年单位植树节活动方案
2014/03/23 职场文书
产品售后服务承诺书
2014/05/21 职场文书
公司承诺书怎么写
2014/05/24 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android
windows系统搭建WEB服务器详细教程
2022/08/05 Servers