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 相关文章推荐
第十三节--对象串行化
Nov 16 PHP
php面向对象全攻略 (九)访问类型
Sep 30 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
php根据年月获取季度的方法
Mar 31 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
php删除指定目录的方法
Apr 03 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
详解PHP版本兼容之openssl调用参数
Jul 25 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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
ThinkPHP中的三大自动简介
2014/08/22 PHP
php中的观察者模式简单实例
2015/01/20 PHP
PHP创建多级目录的两种方法
2016/10/28 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
PHP多个图片压缩成ZIP的方法
2020/08/18 PHP
javascript中window.event事件用法详解
2012/12/11 Javascript
js中eval()函数和trim()去掉字符串左右空格应用
2013/02/02 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
微信小程序授权获取用户详细信息openid的实例详解
2017/09/20 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
Python实现类继承实例
2014/07/04 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
教师个人自我鉴定
2014/02/08 职场文书
中秋晚会活动方案
2014/08/31 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
艺术节开幕词
2015/01/28 职场文书
团委工作总结2015
2015/04/02 职场文书
杨善洲电影观后感
2015/06/04 职场文书
网吧管理制度范本
2015/08/05 职场文书
教师节主题班会方案
2015/08/17 职场文书
2016年公司新年寄语
2015/08/17 职场文书