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 相关文章推荐
smarty实例教程
Nov 19 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
PHP实现图片旋转效果实例代码
Oct 01 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
PHP验证码类ValidateCode解析
Jan 07 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
PHP getName()函数讲解
Feb 03 PHP
PHP检查URL包含特定字符串实例方法
Feb 11 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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
MVC模式的PHP实现
2006/10/09 PHP
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
PHP 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
php获取网页标题和内容函数(不包含html标签)
2014/02/03 PHP
destoon调用discuz论坛中带图片帖子的实现方法
2014/08/21 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
js字符串日期yyyy-MM-dd转化为date示例代码
2014/03/06 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
面试常见的js算法题
2017/03/23 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
JavaScript实现原型封装轮播图
2020/12/27 Javascript
python处理html转义字符的方法详解
2016/07/01 Python
Python中str.format()详解
2017/03/12 Python
python中的闭包函数
2018/02/09 Python
Python实现二维数组输出为图片
2018/04/03 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
Crocs波兰官方商店:女鞋、男鞋、童鞋、洞洞鞋
2019/10/08 全球购物
大学生的应聘自我评价
2013/12/13 职场文书
海南地接欢迎词
2014/01/14 职场文书
医院检讨书范文
2014/02/01 职场文书
网站推广策划方案
2014/06/04 职场文书
营销经理工作检讨书
2014/11/03 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
pytorch 如何使用batch训练lstm网络
2021/05/28 Python
总结几个非常实用的Python库
2021/06/26 Python
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB