本文实例讲述了PHP实现的DES加密解密封装类。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
<?php
/**
* PHP版DES加解密类
* 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容
*
*/
class CryptDes {
var $key ;
var $iv ;
function CryptDes( $key , $iv ){
$this ->key = $key ;
$this ->iv = $iv ;
}
function encrypt( $input ){
$size = mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); //3DES加密将MCRYPT_DES改为MCRYPT_3DES
$input = $this ->pkcs5_pad( $input , $size ); //如果采用PaddingPKCS7,请更换成PaddingPKCS7方法。
$key = str_pad ( $this ->key,8, '0' ); //3DES加密将8改为24
$td = mcrypt_module_open(MCRYPT_DES, '' , MCRYPT_MODE_CBC, '' );
if ( $this ->iv == '' )
{
$iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size( $td ), MCRYPT_RAND);
}
else
{
$iv = $this ->iv;
}
@mcrypt_generic_init( $td , $key , $iv );
$data = mcrypt_generic( $td , $input );
mcrypt_generic_deinit( $td );
mcrypt_module_close( $td );
$data = base64_encode ( $data ); //如需转换二进制可改成 bin2hex 转换
return $data ;
}
function decrypt( $encrypted ){
$encrypted = base64_decode ( $encrypted ); //如需转换二进制可改成 bin2hex 转换
$key = str_pad ( $this ->key,8, '0' ); //3DES加密将8改为24
$td = mcrypt_module_open(MCRYPT_DES, '' ,MCRYPT_MODE_CBC, '' ); //3DES加密将MCRYPT_DES改为MCRYPT_3DES
if ( $this ->iv == '' )
{
$iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size( $td ), MCRYPT_RAND);
}
else
{
$iv = $this ->iv;
}
$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_DES, MCRYPT_MODE_CBC); //3DES加密将MCRYPT_DES改为MCRYPT_3DES
$padding_char = $block_size - ( strlen ( $data ) % $block_size );
$data .= str_repeat ( chr ( $padding_char ), $padding_char );
return $data ;
}
}
$des = new CryptDes( "12345678" , "12345678" ); //(秘钥向量,混淆向量)
echo $ret = $des ->encrypt( "1111" ); //加密字符串
?>
|
希望本文所述对大家PHP程序设计有所帮助。