本文实例讲述了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程序设计有所帮助。