php数据加解密算法

数据加解密

在开发过程中,因为涉及都学生的个人信息(身份证号码,电话,家庭住址等),我们需要对API提供的数据进行加密,提高信息的安全性,以免造成数据泄露。

加密算法

使用加密算法,将API提供的Json数据进行加密,再手机App上再进行解密。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function encrypt($data){
$key = md5("123abc");//设置一个秘钥,保存好,作为获取明文的关键
$x = 0;
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++){
if ($x == $l){
$x = 0;
}
$char .= $key{$x};
$x++;
}
for ($i = 0; $i < $len; $i++){
$str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
}
return base64_encode($str); //将密文转成Base64格式输出
}

解密算法

利用密码进行密文解密,获取明文

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function decrypt($data){
$key = md5("123abc");
$x = 0;
$data = base64_decode($data);
$len = strlen($data);
$l = strlen($key);
for ($i = 0; $i < $len; $i++){
if ($x == $l){
$x = 0;
}
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++){
if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))){
$str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
}
else{
$str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
}
}
return $str;//得到明文
}

iOS开发中,使用swift进行解密,代码如下:

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
public func decrypt(data: String) -> String{
let key = "123abc".md5()
var x = 0
let dataBase64 = base64Decoding(encodedStr: data)
let len = dataBase64.count
let l = key.lengthOfBytes(using: String.Encoding.utf8)
var char = ""
var result = ""
for _ in 0..<len {
if x == l {
x = 0
}
let startIndex = String.Index.init(encodedOffset: x)
char.append(key[startIndex])
x = x + 1
}
for i in 0..<len{
if getASCIIByChar(c: dataBase64[String.Index.init(encodedOffset: i)]) < getASCIIByChar(c: char[String.Index.init(encodedOffset: i)]){
//result.append
result.append(getCharByASCII(n: (getASCIIByChar(c: dataBase64[String.Index.init(encodedOffset: i)]) + 256) - getASCIIByChar(c: char[String.Index.init(encodedOffset: i)])))
}else{
result.append(getCharByASCII(n: getASCIIByChar(c: dataBase64[String.Index.init(encodedOffset: i)]) - getASCIIByChar(c: char[String.Index.init(encodedOffset: i)])))
}
}
return result
}

获取明文后再进行相应的数据解析工作。