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 相关文章推荐
打造计数器DIY三步曲(上)
Oct 09 PHP
PHP XML备份Mysql数据库
May 27 PHP
在PHP中养成7个面向对象的好习惯
Jan 28 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
浅谈discuz密码加密的方式
May 22 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
Oct 30 PHP
PHP使用pcntl_fork实现多进程下载图片的方法
Dec 16 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
通过PHP实现获取访问用户IP
May 09 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
ajax 的post方法实例(带循环)
2011/07/04 PHP
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
获取任意Html元素与body之间的偏移距离 offsetTop、offsetLeft (For:IE5+ FF1 )[
2006/12/22 Javascript
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
2018/03/23 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
python生成n个元素的全组合方法
2018/11/13 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Python如何调用JS文件中的函数
2019/08/16 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Python高级property属性用法实例分析
2019/11/19 Python
python、Matlab求定积分的实现
2019/11/20 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
STP的判定过程
2012/10/01 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
党课知识竞赛主持词
2014/04/01 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
初中中等生评语
2014/12/29 职场文书
项目安全员岗位职责
2015/02/15 职场文书
主持人开场白台词
2015/05/29 职场文书
行政处罚事先告知书
2015/07/01 职场文书
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js