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 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
php获取用户浏览器版本的方法
Jan 03 PHP
php字符串过滤与替换小结
Jan 26 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 PHP
PHP实现获取url地址中顶级域名的方法示例
Jun 05 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
2017/11/17 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[03:36]2015国际邀请赛第二日现场精彩集锦
2015/08/06 DOTA
python实现无证书加密解密实例
2014/10/27 Python
python 性能提升的几种方法
2016/07/15 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python write无法写入文件的解决方法
2019/01/23 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
python中通过pip安装库文件时出现“EnvironmentError: [WinError 5] 拒绝访问”的问题及解决方案
2020/08/11 Python
恶搞卫生巾广告词
2014/03/18 职场文书
《长相思》听课反思
2014/04/10 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
2015年安全员工作总结范文
2015/04/22 职场文书
预备党员考察意见范文
2015/06/01 职场文书
高三生物教学反思
2016/02/22 职场文书
如何拟写通知正文?
2019/04/02 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python