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 相关文章推荐
web方式ftp
Oct 09 PHP
一个简单的自动发送邮件系统(三)
Oct 09 PHP
深入理解PHP几个算法:PHP冒泡、PHP二分法、PHP求素数、PHP乘法表
Jun 06 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 PHP
你应该知道PHP浮点数知识
May 13 PHP
Symfony2实现在controller中获取url的方法
Mar 18 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
php web环境和命令行环境下查找php.ini的位置
Jul 17 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 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自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
PHP+Ajax实时自动检测是否联网的方法
2015/07/01 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
超级退弹代码
2008/07/07 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
深入浅出es6模板字符串
2017/08/26 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
Nuxt的动态路由和参数校验操作
2020/11/09 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
Python pickle模块用法实例分析
2015/05/27 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Python多层装饰器用法实例分析
2018/02/09 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python imutils 填充图片周边为黑色的实现
2020/01/19 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
英语教师求职信
2014/06/16 职场文书
好的促销活动方案
2014/08/21 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2016春季幼儿园开学寄语
2015/12/03 职场文书