php版代码如下:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
<?php
class
CryptAES
{
protected
$cipher
= MCRYPT_RIJNDAEL_128;
protected
$mode
= MCRYPT_MODE_ECB;
protected
$pad_method
= NULL;
protected
$secret_key
=
''
;
protected
$iv
=
''
;
public
function
set_cipher(
$cipher
)
{
$this
->cipher =
$cipher
;
}
public
function
set_mode(
$mode
)
{
$this
->mode =
$mode
;
}
public
function
set_iv(
$iv
)
{
$this
->iv =
$iv
;
}
public
function
set_key(
$key
)
{
$this
->secret_key =
$key
;
}
public
function
require_pkcs5()
{
$this
->pad_method =
'pkcs5'
;
}
protected
function
pad_or_unpad(
$str
,
$ext
)
{
if
(
is_null
(
$this
->pad_method) )
{
return
$str
;
}
else
{
$func_name
=
__CLASS__
.
'::'
.
$this
->pad_method .
'_'
.
$ext
.
'pad'
;
if
(
is_callable
(
$func_name
) )
{
$size
= mcrypt_get_block_size(
$this
->cipher,
$this
->mode);
return
call_user_func(
$func_name
,
$str
,
$size
);
}
}
return
$str
;
}
protected
function
pad(
$str
)
{
return
$this
->pad_or_unpad(
$str
,
''
);
}
protected
function
unpad(
$str
)
{
return
$this
->pad_or_unpad(
$str
,
'un'
);
}
public
function
encrypt(
$str
)
{
$str
=
$this
->pad(
$str
);
$td
= mcrypt_module_open(
$this
->cipher,
''
,
$this
->mode,
''
);
if
(
empty
(
$this
->iv) )
{
$iv
= @mcrypt_create_iv(mcrypt_enc_get_iv_size(
$td
), MCRYPT_RAND);
}
else
{
$iv
=
$this
->iv;
}
mcrypt_generic_init(
$td
,
$this
->secret_key,
$iv
);
$cyper_text
= mcrypt_generic(
$td
,
$str
);
$rt
=
base64_encode
(
$cyper_text
);
//$rt = bin2hex($cyper_text);
mcrypt_generic_deinit(
$td
);
mcrypt_module_close(
$td
);
return
$rt
;
}
public
function
decrypt(
$str
){
$td
= mcrypt_module_open(
$this
->cipher,
''
,
$this
->mode,
''
);
if
(
empty
(
$this
->iv) )
{
$iv
= @mcrypt_create_iv(mcrypt_enc_get_iv_size(
$td
), MCRYPT_RAND);
}
else
{
$iv
=
$this
->iv;
}
mcrypt_generic_init(
$td
,
$this
->secret_key,
$iv
);
//$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));
$decrypted_text
= mdecrypt_generic(
$td
,
base64_decode
(
$str
));
$rt
=
$decrypted_text
;
mcrypt_generic_deinit(
$td
);
mcrypt_module_close(
$td
);
return
$this
->unpad(
$rt
);
}
public
static
function
hex2bin(
$hexdata
) {
$bindata
=
''
;
$length
=
strlen
(
$hexdata
);
for
(
$i
=0;
$i
amp;<
$length
;
$i
+= 2)
{
$bindata
.=
chr
(hexdec(
substr
(
$hexdata
,
$i
, 2)));
}
return
$bindata
;
}
public
static
function
pkcs5_pad(
$text
,
$blocksize
)
{
$pad
=
$blocksize
- (
strlen
(
$text
) %
$blocksize
);
return
$text
.
str_repeat
(
chr
(
$pad
),
$pad
);
}
public
static
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
);
}
}
$keyStr
=
'UITN25LMUQC436IM'
;
$plainText
=
'this is a string will be AES_Encrypt'
;
$aes
=
new
CryptAES();
$aes
->set_key(
$keyStr
);
$aes
->require_pkcs5();
$encText
=
$aes
->encrypt(
$plainText
);
$decString
=
$aes
->decrypt(
$encText
);
echo
$encText
,
"n"
,
$decString
;
?>
|
运行结果:
fhTD0NNIzv4jUEhJuC1htFFXJ/4S/rL6tDCJPiNvJ8mVLHWOD0HWweuxHynxoZf9
this is a string will be AES_Encrypt
java版代码如下:
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
|
import
java.security.Key;
import
javax.crypto.Cipher;
import
javax.crypto.spec.SecretKeySpec;
import
org.apache.commons.codec.binary.Base64;
public
class
CryptAES {
private
static
final
String AESTYPE =
"AES/ECB/PKCS5Padding"
;
public
static
String AES_Encrypt(String keyStr, String plainText) {
byte
[] encrypt =
null
;
try
{
Key key = generateKey(keyStr);
Cipher cipher = Cipher.getInstance(AESTYPE);
cipher.init(Cipher.ENCRYPT_MODE, key);
encrypt = cipher.doFinal(plainText.getBytes());
}
catch
(Exception e){
e.printStackTrace();
}
return
new
String(Base64.encodeBase64(encrypt));
}
public
static
String AES_Decrypt(String keyStr, String encryptData) {
byte
[] decrypt =
null
;
try
{
Key key = generateKey(keyStr);
Cipher cipher = Cipher.getInstance(AESTYPE);
cipher.init(Cipher.DECRYPT_MODE, key);
decrypt = cipher.doFinal(Base64.decodeBase64(encryptData));
}
catch
(Exception e){
e.printStackTrace();
}
return
new
String(decrypt).trim();
}
private
static
Key generateKey(String key)
throws
Exception{
try
{
SecretKeySpec keySpec =
new
SecretKeySpec(key.getBytes(),
"AES"
);
return
keySpec;
}
catch
(Exception e){
e.printStackTrace();
throw
e;
}
}
public
static
void
main(String[] args) {
String keyStr =
"UITN25LMUQC436IM"
;
String plainText =
"this is a string will be AES_Encrypt"
;
String encText = AES_Encrypt(keyStr, plainText);
String decString = AES_Decrypt(keyStr, encText);
System.out.println(encText);
System.out.println(decString);
}
}
|
运行结果:
fhTD0NNIzv4jUEhJuC1htFFXJ/4S/rL6tDCJPiNvJ8mVLHWOD0HWweuxHynxoZf9
this is a string will be AES_Encrypt