php中3des加密代码(完全与.net中的兼容)

 更新时间:2012年08月02日 16:06:30   作者:  
php中3des加密的结果与.Net/java不同的帖子与话题实在是太多了,我前不久也在倒腾这些,不过今天已经搞定了,完全与.net中的兼容
复制代码 代码如下:

<?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实现将base64格式图片保存在指定目录的方法

    php实现将base64格式图片保存在指定目录的方法

    这篇文章主要介绍了php实现将base64格式图片保存在指定目录的方法,涉及php针对图片文件的传输、判定及转换等相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • 粗略计算在线时间,bug:ip相同

    粗略计算在线时间,bug:ip相同

    粗略计算在线时间,bug:ip相同...
    2006-12-12
  • CodeIgniter图像处理类的深入解析

    CodeIgniter图像处理类的深入解析

    本篇文章是对CodeIgniter的图像处理类进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php中数字、字符与对象判断函数用法实例

    php中数字、字符与对象判断函数用法实例

    这篇文章主要介绍了php中数字、字符与对象判断函数用法,以实例形式分析了is_bool()、is_int()、is_integer()、is_float()、is_real()、is_object() 和 is_array()等函数的作用及具体用法,需要的朋友可以参考下
    2014-11-11
  • PHP使用数组实现队列

    PHP使用数组实现队列

    PHP的数组处理函数还可以将数组实现队列,堆栈是“先进后出”。在堆栈中,最后压入的数据(进栈),将会被最先弹出(出栈)。而队列是先进先出,就如同银行的排号机
    2012-02-02
  • PHP使用PHPExcel删除Excel单元格指定列的方法

    PHP使用PHPExcel删除Excel单元格指定列的方法

    这篇文章主要介绍了PHP使用PHPExcel删除Excel单元格指定列的方法,涉及PHPExcel针对Excel单元格的遍历操作及removeColumn方法删除单元格的相关使用技巧,需要的朋友可以参考下
    2016-07-07
  • PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)

    PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)

    常量包含数字字母字符和下划线,数字允许作为常量名。 常量名的所有字母必须大写。类常量必须通过 const 定义为类的成员,强烈不鼓励使用 define 定义的全局常量
    2014-09-09
  • PHP常用操作类之通信数据封装类的实现

    PHP常用操作类之通信数据封装类的实现

    PHP类的封装对于初学者来说是比较难懂的,下面这篇文章主要给大家介绍了关于PHP常用操作类之通信数据封装类实现的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来一起学习学习吧。
    2017-07-07
  • php 命名空间(namespace)原理与用法实例小结

    php 命名空间(namespace)原理与用法实例小结

    这篇文章主要介绍了php 命名空间(namespace)原理与用法,结合实例形式总结分析了PHP命名空间的相关概念、原理、基本使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-11-11
  • php中引用符号(&)的使用详解

    php中引用符号(&)的使用详解

    php的引用就是在变量或者函数、对象等前面加上&符号,在PHP 中引用的意思是:不同的名字访问同一个变量内容,下面介绍如何使用PHP的引用
    2013-11-11

最新评论