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 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
php5.2.0内存管理改进
Jan 22 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
关于svn冲突的解决方法
Jun 21 PHP
php图像处理函数大全(推荐收藏)
Jul 11 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
php+flash+jQuery多图片上传源码分享
Jul 27 PHP
php curl常用的5个经典例子
Jan 20 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
Oct 12 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 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 jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
php实现购物车功能(上)
2020/07/23 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
利用PHP获取网站访客的所在地位置
2017/01/18 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
阿里云的WindowsServer2016上部署php+apache
2018/07/17 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
基于Vue2.X的路由和钩子函数详解
2018/02/09 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
详解python中的json的基本使用方法
2016/12/21 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
tensorboard显示空白的解决
2020/02/15 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
年终总结会主持词
2014/03/25 职场文书
支部鉴定材料
2014/06/02 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
商务邀请函
2015/01/30 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
手把手教你使用TensorFlow2实现RNN
2021/07/15 Python