php中3des加密代码(完全与.net中的兼容)
php中3des加密代码(完全与.net中的兼容)
发布时间:2016-12-29 来源:查字典编辑
摘要:复制代码代码如下:

复制代码 代码如下:

<?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教程学习
编程开发子分类