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 引用是个坏习惯
Mar 12 PHP
PHP学习笔记之二 php入门知识
Jan 12 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
PHP文件缓存类实现代码
Oct 26 PHP
php实现异步数据调用的方法
Dec 24 PHP
PHP并发多进程处理利器Gearman使用介绍
May 16 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
PHP获取二叉树镜像的方法
Jan 17 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
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
token 机制和实现方式
2020/12/15 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
简单实现python进度条脚本
2017/12/18 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
教师绩效考核方案
2014/01/21 职场文书
给校长的建议书300字
2014/05/16 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
求职导师推荐信范文
2015/03/27 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书