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 相关文章推荐
对text数据类型不支持代码页转换 从: 1252 到: 936
Apr 23 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
php过滤HTML标签、属性等正则表达式汇总
Sep 22 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
php微信开发之关键词回复功能
Jun 13 PHP
PHP实现普通hash分布式算法简单示例
Aug 06 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
Dec 11 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简单提示框alert封装函数
2010/08/08 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
如何打开php的gd2库
2017/02/09 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
js调用flash的效果代码
2008/04/26 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
Python人脸识别初探
2017/12/21 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
在Pycharm中自动添加时间日期作者等信息的方法
2019/01/16 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
请解释流与文件有什么不同
2016/07/29 面试题
大学生如何写自荐信
2014/01/08 职场文书
工作表现证明
2015/06/15 职场文书