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的5个入手程序
Nov 23 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
PHP callback函数使用方法和注意事项
Jan 23 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
Oct 27 PHP
PHP判断手机是IOS还是Android
Dec 09 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
php自动载入类用法实例分析
Jun 24 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
Oct 14 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 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
Syphon 秘笈
2021/03/03 冲泡冲煮
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
thinkphp的dump函数无输出实例代码
2016/11/15 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
简单的js表单验证函数
2013/10/28 Javascript
AngularJS基础知识
2014/12/21 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
Javascript必知必会(四)js类型转换
2016/06/08 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
[03:58]兄弟们,回来开黑了!DOTA2昔日战友招募宣传视频
2016/07/17 DOTA
Python实现Const详解
2015/01/27 Python
使用Python的PEAK来适配协议的教程
2015/04/14 Python
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
2020/03/03 Python
学python爬虫能做什么
2020/07/29 Python
介绍一下Java中的Class类
2015/04/10 面试题
学校百日安全生产活动总结
2014/07/05 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
水电工岗位职责
2015/02/14 职场文书
研讨会通知
2015/04/27 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
单位综合评价意见
2015/06/05 职场文书
开业典礼致辞
2015/07/29 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers