php中3DES加密技术
因为工作中要用到加密,接口中要求也是用密文传输数据,用到3des加密,就研究了一下。
在网上也找了好多,但是都不可以用,没法正式运行,终于找到一个可以运行的,自己又修改了一下,记录下来,以后还可能会用到。
下面安装我要调用的接口文实例:
在调用PHP中的mcrypt_get_block_size()函数时需要:
启用Mcrypt函数集。linux下要安装libmcrypt,windows下找到php.ini文件里
extension=php_mcrypt.dll
extension=php_mcrypt_filter.dll
接口要求:
先用3DES对数据进行加密,在用BASE64进行加密。即:BASE64(3DES(value))。
3DES加密规则:
模式:ECB
填充模式:PKCS7Padding
数据块大小:8字节(64位)
初始化向量:无
密钥:XXXXXXXXXXXXXXXXX
首先是一个封装好的类文件:
encrypt_class.php//文件名
-
<?php
-
class Crypt3Des {
-
public $key = "bugaosuni"; // 这个根据实际情况写
-
function encrypt($input) { // 数据加密
-
$size = mcrypt_get_block_size ( MCRYPT_3DES, 'ecb' );
-
$input = $this->pkcs5_pad ( $input, $size );
-
$key = str_pad ( $this->key, 24, '0' );
-
$td = mcrypt_module_open ( MCRYPT_3DES, '', 'ecb', '' );
-
$iv = @mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND );
-
@mcrypt_generic_init ( $td, $key, $iv );
-
$data = mcrypt_generic ( $td, $input );
-
mcrypt_generic_deinit ( $td );
-
mcrypt_module_close ( $td );
-
$data = base64_encode ( $data );
-
return $data;
-
}
-
function decrypt($encrypted) { // 数据解密
-
$encrypted = base64_decode ( $encrypted );
-
$key = str_pad ( $this->key, 24, '0' );
-
$td = mcrypt_module_open ( MCRYPT_3DES, '', 'ecb', '' );
-
$iv = @mcrypt_create_iv ( mcrypt_enc_get_iv_size ( $td ), MCRYPT_RAND );
-
$ks = mcrypt_enc_get_key_size ( $td );
-
@mcrypt_generic_init ( $td, $key, $iv );
-
$decrypted = mdecrypt_generic ( $td, $encrypted );
-
mcrypt_generic_deinit ( $td );
-
mcrypt_module_close ( $td );
-
$y = $this->pkcs5_unpad ( $decrypted );
-
return $y;
-
}
-
function pkcs5_pad($text, $blocksize) {
-
$pad = $blocksize - (strlen ( $text ) % $blocksize);
-
return $text . str_repeat ( chr ( $pad ), $pad );
-
}
-
function pkcs5_unpad($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 );
-
}
-
function PaddingPKCS7($data) {
-
$block_size = mcrypt_get_block_size ( MCRYPT_3DES, MCRYPT_MODE_CBC );
-
$padding_char = $block_size - (strlen ( $data ) % $block_size);
-
$data .= str_repeat ( chr ( $padding_char ), $padding_char );
-
return $data;
-
}
-
}
-
-
$rep = new Crypt3Des (); // 初始化一个对象
-
$input = "hello worldfdfdfdfdd";
-
echo "原文:" . $input . "
";
-
$encrypt_card = $rep->encrypt ( $input );
-
echo "加密:" . $encrypt_card . "
";
-
echo "解密:" . $rep->decrypt ( $rep->encrypt ( $input ) );
-
-
?>
这是一个非常有用的3des加密,在多数情况下可以直接拿来用。很不错哦~!@
阅读(5595) | 评论(0) | 转发(0) |