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 相关文章推荐
第八节--访问方式
Nov 16 PHP
用PHP 快速生成 Flash 动画的方法
Mar 06 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
简化php模板页面中分页代码的解析
Feb 06 PHP
网页游戏开发入门教程二(游戏模式+系统)
Nov 02 PHP
php入门学习知识点一 PHP与MYSql连接与查询
Jul 14 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
php获取微信openid方法总结
Oct 10 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 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使用者状态管理功能的应用
2006/10/09 PHP
PHP&amp;MYSQL服务器配置说明
2006/10/09 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
用js实现计算加载页面所用的时间
2010/04/02 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
如何理解jQuery中的ajaxSubmit方法
2017/03/13 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
浅谈Python的文件类型
2016/05/30 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
对Python3 序列解包详解
2019/02/16 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
澳大利亚一站式数码相机商店:CameraPro
2020/03/09 全球购物
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
留学推荐信写作指南
2014/01/25 职场文书
驻村工作简报
2015/07/20 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书
优秀大学生申请书
2019/06/24 职场文书
七年级话题作文之执着
2019/11/19 职场文书
浅谈pytorch中stack和cat的及to_tensor的坑
2021/05/20 Python