[转]php与java通用AES加密解密算法
来源:互联网 发布:java单例模式例子 编辑:程序博客网 时间:2024/04/30 02:56
AES指高级加密标准(Advanced Encryption Standard),是当前最流行的一种密码算法,在web应用开发,特别是对外提供接口时经常会用到,下面是我整理的一套php与java通用的AES加密解密算法。php版代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145<?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版代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061import
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
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
0 0
- [转]php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- php与java通用AES加密解密算法
- PHP-AES加密解密算法
- JS AES加密与PHP解密(转)
- OC与JAVA通用的AES加密解密
- OC与JAVA通用的AES加密解密
- Java加密解密算法-AES加密解密
- Java AES加密解密算法
- java AES 加密与解密
- JAVA AES加密与解密
- php aes 加密解密可与java对接
- JAVA与PHP之间进行aes加密解密
- C#与Java互通AES算法加密解密
- C#与Java互通AES算法加密解密
- java delphi aes 加密与解密文件兼容算法
- 韩顺平 javascript教学视频_学习笔记9_js函数调用过程内存分析_js函数细节
- 【Python】抓取拉勾网全国Python的招聘信息
- Apache Maven 入门篇 ( 上 )
- 【坐在马桶上看算法】算法8:巧妙的邻接表(数组实现)
- UIAlertView简单记载
- [转]php与java通用AES加密解密算法
- Unity在BitMap中使用数字表示图片
- jquery radio的取值 radio的选中 radio的重置
- MATLAB快捷键大全
- 韩顺平 javascript教学视频_学习笔记10_js一维数组_一维数组细节
- Android Studio多渠道打包和代码混淆教程
- Alcatraz
- 属性和字段
- Unity之AssetBundle资源管理