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新手上路(十四)
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
PHP发明人谈MVC和网站设计架构 貌似他不支持php用mvc
Jun 04 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
php使用多个进程同时控制文件读写示例
Feb 28 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
Jan 26 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
May 06 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 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自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
javascript加号&quot;+&quot;的二义性说明
2013/03/04 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
JS基于面向对象实现的选项卡效果示例
2016/12/20 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
微信小程序 地图map实例详解
2017/06/07 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
[01:32]DOTA2 2015国际邀请赛中国区预选赛第四日战报
2015/05/29 DOTA
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python列表的增删改查实例代码
2018/01/30 Python
python特性语法之遍历、公共方法、引用
2018/08/08 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
Python中logging实例讲解
2019/01/17 Python
python 实现多线程下载视频的代码
2019/11/15 Python
python 实现dict转json并保存文件
2019/12/05 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
新闻系毕业生推荐信
2013/11/16 职场文书
早餐连锁店计划书
2014/01/08 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
《风筝》教学反思
2014/04/10 职场文书
父母寄语大全
2014/04/12 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server