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 相关文章推荐
用PHP实现登陆验证码(类似条行码状)
Oct 09 PHP
PHP mkdir()定义和用法
Jan 14 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
php随机输出名人名言的代码
Oct 07 PHP
php对二维数组按指定键值key排序示例代码
Nov 26 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php验证码实现代码(3种)
Sep 07 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 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
php中全局变量global的使用演示代码
2011/05/18 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
php判断邮箱地址是否存在的方法
2016/02/13 PHP
php实现生成验证码实例分享
2016/04/10 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
PHP 图片处理
2020/09/16 PHP
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
JsDom 编程小结
2011/08/09 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
代码详解javascript模块加载器
2018/03/04 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
python通过字典dict判断指定键值是否存在的方法
2015/03/21 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
如何解决cmd运行python提示不是内部命令
2020/07/01 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
解决HTML5中滚动到底部的事件问题
2019/08/22 HTML / CSS
毕业生简单求职信
2013/11/19 职场文书
高一生物教学反思
2014/01/17 职场文书
银行转正自我鉴定
2014/09/29 职场文书
人口与计划生育责任书
2015/05/09 职场文书
呼兰河传读书笔记
2015/06/30 职场文书