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 相关文章推荐
层叠菜单的动态生成
Oct 09 PHP
通过html表格发电子邮件
Oct 09 PHP
用PHP和ACCESS写聊天室(六)
Oct 09 PHP
php获得文件扩展名三法
Nov 25 PHP
第六章 php目录与文件操作
Dec 30 PHP
php中session使用示例
Mar 29 PHP
php实现的短网址算法分享
Jun 20 PHP
destoon实现不同会员组公司名称显示不同的颜色的方法
Aug 22 PHP
yii的CURD操作实例详解
Dec 04 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
php封装的page分页类完整实例
Oct 18 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
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
php获取字段名示例分享
2014/03/03 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
JS 常用校验函数
2009/03/26 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
web网页按比例显示图片实现原理及js代码
2013/08/09 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
深入解析koa之中间件流程控制
2019/06/17 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
基于python时间处理方法(详解)
2017/08/14 Python
python实现控制台打印的方法
2019/01/12 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
2020/05/18 Python
EJB与JAVA BEAN的区别
2016/08/29 面试题
班班通项目实施方案
2014/02/25 职场文书
《桥》教学反思
2014/04/09 职场文书
复试通知单模板
2015/04/24 职场文书
论文致谢词范文
2015/05/14 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android
mysql中关键词exists的用法实例详解
2022/06/10 MySQL
MySQL常用慢查询分析工具详解
2022/08/14 MySQL