服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - php中3des加密代码(完全与.net中的兼容)

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

2020-01-06 15:58php教程网 PHP教程

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); 


?> 

延伸 · 阅读

精彩推荐