PHP,安卓,ios相互适用的AES加密算法
来源:互联网 发布:加索尔10年总决赛数据 编辑:程序博客网 时间:2024/06/06 12:42
http://wangsigui.blog.51cto.com/5362901/1340415
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
import
javax.crypto.Cipher;
import
javax.crypto.spec.IvParameterSpec;
import
javax.crypto.spec.SecretKeySpec;
import
android.util.Base64;
/**
* @author vipin.cb , vipin.cb@experionglobal.com <br>
* Sep 27, 2013, 5:18:34 PM <br>
* Package:- <b>com.veebow.util</b> <br>
* Project:- <b>Veebow</b>
* <p>
*/
public
class
AESCrypt {
private
final
Cipher cipher;
private
final
SecretKeySpec key;
private
AlgorithmParameterSpec spec;
public
static
final
String SEED_16_CHARACTER =
"U1MjU1M0FDOUZ.Qz"
;
public
AESCrypt()
throws
Exception {
// hash password with SHA-256 and crop the output to 128-bit for key
MessageDigest digest = MessageDigest.getInstance(
"SHA-256"
);
digest.update(SEED_16_CHARACTER.getBytes(
"UTF-8"
));
byte
[] keyBytes =
new
byte
[
32
];
System.arraycopy(digest.digest(),
0
, keyBytes,
0
, keyBytes.length);
cipher = Cipher.getInstance(
"AES/CBC/PKCS7Padding"
);
key =
new
SecretKeySpec(keyBytes,
"AES"
);
spec = getIV();
}
public
AlgorithmParameterSpec getIV() {
byte
[] iv = {
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
, };
IvParameterSpec ivParameterSpec;
ivParameterSpec =
new
IvParameterSpec(iv);
return
ivParameterSpec;
}
public
String encrypt(String plainText)
throws
Exception {
cipher.init(Cipher.ENCRYPT_MODE, key, spec);
byte
[] encrypted = cipher.doFinal(plainText.getBytes(
"UTF-8"
));
String encryptedText =
new
String(Base64.encode(encrypted,
Base64.DEFAULT),
"UTF-8"
);
return
encryptedText;
}
public
String decrypt(String cryptedText)
throws
Exception {
cipher.init(Cipher.DECRYPT_MODE, key, spec);
byte
[] bytes = Base64.decode(cryptedText, Base64.DEFAULT);
byte
[] decrypted = cipher.doFinal(bytes);
String decryptedText =
new
String(decrypted,
"UTF-8"
);
return
decryptedText;
}
}
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
<?php
class
MCrypt {
private
$hex_iv
=
'00000000000000000000000000000000'
; # converted JAVA byte code in to HEX
and
placed it here
private
$key
=
'U1MjU1M0FDOUZ.Qz'
; #Same
as
in JAVA
function
__construct() {
$this
->key = hash(
'sha256'
,
$this
->key, true);
//echo $this->key.'<br/>';
}
function
encrypt(
$str
) {
$td
= mcrypt_module_open(MCRYPT_RIJNDAEL_128,
''
, MCRYPT_MODE_CBC,
''
);
mcrypt_generic_init(
$td
,
$this
->key,
$this
->hexToStr(
$this
->hex_iv));
$block
= mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad
=
$block
- (
strlen
(
$str
) %
$block
);
$str
.=
str_repeat
(
chr
(
$pad
),
$pad
);
$encrypted
= mcrypt_generic(
$td
,
$str
);
mcrypt_generic_deinit(
$td
);
mcrypt_module_close(
$td
);
return
base64_encode
(
$encrypted
);
}
function
decrypt(
$code
) {
$td
= mcrypt_module_open(MCRYPT_RIJNDAEL_128,
''
, MCRYPT_MODE_CBC,
''
);
mcrypt_generic_init(
$td
,
$this
->key,
$this
->hexToStr(
$this
->hex_iv));
$str
= mdecrypt_generic(
$td
,
base64_decode
(
$code
));
$block
= mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
mcrypt_generic_deinit(
$td
);
mcrypt_module_close(
$td
);
return
$this
->strippadding(
$str
);
}
/*
For PKCS7 padding
*/
private
function
addpadding(
$string
,
$blocksize
= 16) {
$len
=
strlen
(
$string
);
$pad
=
$blocksize
- (
$len
%
$blocksize
);
$string
.=
str_repeat
(
chr
(
$pad
),
$pad
);
return
$string
;
}
private
function
strippadding(
$string
) {
$slast
= ord(
substr
(
$string
, -1));
$slastc
=
chr
(
$slast
);
$pcheck
=
substr
(
$string
, -
$slast
);
if
(preg_match(
"/$slastc{"
.
$slast
.
"}/"
,
$string
)) {
$string
=
substr
(
$string
, 0,
strlen
(
$string
) -
$slast
);
return
$string
;
}
else
{
return
false;
}
}
function
hexToStr(
$hex
)
{
$string
=
''
;
for
(
$i
=0;
$i
<
strlen
(
$hex
)-1;
$i
+=2)
{
$string
.=
chr
(hexdec(
$hex
[
$i
].
$hex
[
$i
+1]));
}
return
$string
;
}
}
$encryption
=
new
MCrypt();
echo
$encryption
->encrypt(
'123456'
) .
"<br/>"
;
echo
$encryption
->decrypt(
'tpyxISJ83dqEs3uw8bN/+w=='
);
0 0
- PHP,安卓,ios相互适用的AES加密算法
- (转)PHP android ios相互兼容的AES加密算法
- PHP android ios相互兼容的AES加密算法
- PHP android ios相互兼容的AES加密算法
- PHP android ios相互兼容的AES加密算法
- 调试好用的AES加密算法 和 安卓AES加密对应算法
- AES加密,iOS、android、PHP 相互兼容
- IOS中的AES加密算法
- PHP AES 128位加密算法
- AES加密算法的理解
- AES的文件加密算法
- aes加密算法的理解
- iOS开发-数据加密算法AES
- Android、IOS通用的AES加密算法,亲测可用
- AES加密算法的实现原理
- 使用Openssl的AES加密算法
- C# 实现的 AES 加密算法
- AES加密算法的C++实现
- kill掉minerd:别让你的服务器被别人当做挖矿机器
- switch case 选择分支的学习
- 苹果Mac禁用更改文件名后缀提示
- 学习Linux:第一周
- 自己实现的栈----有图形界面的哦
- PHP,安卓,ios相互适用的AES加密算法
- easyui layout 标配,破解不正常显示
- AES加密(兼容php,java,objective-c)
- S5700的ACL访问控制列表及实验
- 不用分布式方式,处理大量数据的问题(2)
- iOS Quartz笔记
- 制作一个简单的Native App-利用“添加到主屏幕”
- iOS UIView分类调整控件坐标
- 利用Android属性动画实现Banner控件