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实现识别复杂pdf文档的示例代码

    PHP实现识别复杂pdf文档的示例代码

    这篇文章主要为大家详细介绍了如何使用PHP实现识别复杂pdf文档的功能,文中的示例代码讲解详细,感兴趣的徐海波可以跟随小编一起学习一下
    2024-01-01
  • php使用include 和require引入文件的区别

    php使用include 和require引入文件的区别

    require()语句的性能与include()相类似,都是包括并运行指定文件。不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换require()语句)。
    2017-02-02
  • php setcookie函数的参数说明及其用法

    php setcookie函数的参数说明及其用法

    这篇文章主要介绍了php setcookie函数的参数说明及其用法,需要的朋友可以参考下
    2014-04-04
  • input file获得文件根目录简单实现

    input file获得文件根目录简单实现

    js获得file根目录,然后赋值给hidden类型input,然后就可以交给php or jsp 处理了,感兴趣的朋友可以参考下哈,希望可以帮助到你
    2013-04-04
  • fgetcvs在linux的问题

    fgetcvs在linux的问题

    PHP5中的fgetcsv()函数在Linux上会有一个Bug:把文本字段的第一个字符的高位去除掉了,然后就会产生乱码
    2012-01-01
  • PHP引用的调用方法分析

    PHP引用的调用方法分析

    这篇文章主要介绍了PHP引用的调用方法,结合实例形式分析了PHP中引用的常见调用技巧,需要的朋友可以参考下
    2016-04-04
  • 使用Sphinx对索引进行搜索

    使用Sphinx对索引进行搜索

    本篇文章是对使用Sphinx对索引进行搜索的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • PHP INT类型在内存中占字节详解

    PHP INT类型在内存中占字节详解

    在本文里我们给大家分享了关于PHP输出INT类型在内存中占多少个字节的相关知识点,需要的朋友们参考下。
    2019-07-07
  • PHP+Mysql+jQuery实现动态展示信息

    PHP+Mysql+jQuery实现动态展示信息

    在本文中,我将介绍如何在页面上实现动态展示用户发表的信息,将用户发表的信息逐条播放展示。该效果可以在展示系统动态、商品评论等场景应用
    2011-10-10
  • PHP正则表达式处理函数(PCRE 函数)实例小结

    PHP正则表达式处理函数(PCRE 函数)实例小结

    这篇文章主要介绍了PHP正则表达式处理函数(PCRE 函数),结合实例形式总结分析了php正则表达式preg_replace、preg_match、preg_match_all、preg_split及preg_quote等函数相关使用技巧,需要的朋友可以参考下
    2019-05-05

最新评论