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下图片文字混合水印与缩略图实现代码
Dec 11 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 PHP
优化PHP代码技巧的小结
Jun 02 PHP
php+ajax实现无刷新分页的方法
Nov 04 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php利用事务处理转账问题
Apr 22 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP调用接口用post方法传送json数据的实例
May 31 PHP
PHP获取学生成绩的方法
Nov 17 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
德生1994机评
2021/03/02 无线电
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
Javascript var变量隐式声明方法
2009/10/19 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
jQuery的Ajax的自动完成功能控件简要说明
2013/02/22 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
Python全局变量操作详解
2015/04/14 Python
python使用__slots__让你的代码更加节省内存
2018/09/05 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
如何在python中写hive脚本
2019/11/08 Python
解决python打开https出现certificate verify failed的问题
2020/09/03 Python
为什么使用接口?
2014/08/13 面试题
产品生产计划书
2014/05/07 职场文书
司法助理专业自荐书
2014/06/13 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
离婚财产处理协议书
2014/09/30 职场文书
新员工入职欢迎词
2015/01/23 职场文书
红色电影观后感
2015/06/18 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
Python使用MapReduce进行简单的销售统计
2022/04/22 Python