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 相关文章推荐
paypal即时到账php实现代码
Nov 28 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
PHP5.4中json_encode中文转码的变化小结
Jan 30 PHP
PHP批量生成静态HTML的简单原理和方法
Apr 20 PHP
php+mysql结合Ajax实现点赞功能完整实例
Jan 30 PHP
php实现简单文件下载的方法
Jan 30 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
php+ajax制作无刷新留言板
Oct 27 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
phpquery中文手册
Mar 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
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
PHP中的float类型使用说明
2010/07/27 PHP
php ios推送(代码)
2013/07/01 PHP
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
使用jQuery卸载全部事件的思路详解
2017/04/03 jQuery
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
详解Python编程中对Monkey Patch猴子补丁开发方式的运用
2016/05/27 Python
python定向爬取淘宝商品价格
2018/02/27 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
机械系大学毕业生推荐信
2013/11/27 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014年科技工作总结
2014/11/26 职场文书
营销计划书
2015/01/17 职场文书
聚会通知怎么写
2015/04/23 职场文书
校园安全教育心得体会
2016/01/15 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python