php中3des加密代码(完全与.net中的兼容)


Posted in PHP onAugust 02, 2012
<?php 
class Crypt3Des 
{ 
private $key = ""; 
private $iv = ""; 
/** 
* 构造,传递二个已经进行base64_encode的KEY与IV 
* 
* @param string $key 
* @param string $iv 
*/ 
function __construct ($key, $iv) 
{ 
if (empty($key) || empty($iv)) { 
echo 'key and iv is not valid'; 
exit(); 
} 
$this->key = $key; 
$this->iv = $iv; 
} 
/** 
*加密 
* @param <type> $value 
* @return <type> 
*/ 
public function encrypt ($value) 
{ 
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); 
$iv = base64_decode($this->iv); 
$value = $this->PaddingPKCS7($value); 
$key = base64_decode($this->key); 
mcrypt_generic_init($td, $key, $iv); 
$ret = base64_encode(mcrypt_generic($td, $value)); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
return $ret; 
} 
/** 
*解密 
* @param <type> $value 
* @return <type> 
*/ 
public function decrypt ($value) 
{ 
$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, ''); 
$iv = base64_decode($this->iv); 
$key = base64_decode($this->key); 
mcrypt_generic_init($td, $key, $iv); 
$ret = trim(mdecrypt_generic($td, base64_decode($value))); 
$ret = $this->UnPaddingPKCS7($ret); 
mcrypt_generic_deinit($td); 
mcrypt_module_close($td); 
return $ret; 
} 
private function PaddingPKCS7 ($data) 
{ 
$block_size = mcrypt_get_block_size('tripledes', 'cbc'); 
$padding_char = $block_size - (strlen($data) % $block_size); 
$data .= str_repeat(chr($padding_char), $padding_char); 
return $data; 
} 
private function UnPaddingPKCS7 ($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); 
} 
} 
?>
PHP 相关文章推荐
有道搜索和IP138的IP的API接口(PHP应用)
Nov 29 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
php数组索引与键值操作技巧实例分析
Jun 24 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
php+ajax无刷新上传图片实例代码
Nov 17 PHP
PHP简单实现DES加密解密的方法
Jul 12 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 #PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 #PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 #PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 #PHP
php切割页面div内容的实现代码分享
Jul 31 #PHP
php中数组首字符过滤功能代码
Jul 31 #PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 #PHP
You might like
咖啡的化学
2021/03/03 咖啡文化
PHP 获取MySQL数据库里所有表的实现代码
2011/07/13 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
arguments对象
2006/11/20 Javascript
Javascript - HTML的request类
2007/01/09 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
浅谈jquery高级方法描述与应用
2016/10/04 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
python使用百度翻译进行中翻英示例
2014/04/14 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
新闻学专业应届生求职信
2013/11/08 职场文书
计算机相关的自我评价
2014/01/15 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
2014高考励志标语
2014/06/05 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
用JS创建一个录屏功能
2021/11/11 Javascript