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面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
PHP 采集程序中常用的函数
Dec 09 PHP
php列出一个目录下的所有文件的代码
Oct 09 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
PHP中常用的字符串格式化函数总结
Nov 19 PHP
Laravel 5框架学习之Eloquent 关系
Apr 09 PHP
PHP SPL标准库之SplFixedArray使用实例
May 12 PHP
CodeIgniter辅助之第三方类库third_party用法分析
Jan 20 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 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
使用php自动备份数据库表的实现方法
2017/07/28 PHP
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
jQuery插件 selectToSelect使用方法
2013/10/02 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
jQuery页面元素动态添加后绑定事件丢失方法,非 live
2016/06/16 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
JS实现简易日历效果
2021/01/25 Javascript
python list转dict示例分享
2014/01/28 Python
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
17个Python小技巧分享
2015/01/23 Python
python自然语言编码转换模块codecs介绍
2015/04/08 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
python实现超市商品销售管理系统
2019/11/22 Python
python实现画循环圆
2019/11/23 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
html5 touch事件实现触屏页面上下滑动(一)
2016/03/10 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
《庐山的云雾》教学反思
2014/04/22 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
六年级小学生评语
2014/12/26 职场文书
员工自我评价范文
2015/03/11 职场文书
宣传稿格式范文
2015/07/23 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
JavaScript实现音乐播放器
2022/08/14 Javascript