PHP实现数据的加解密

由于,PC端软件需要与WEB端通过API进行交互,如果采用明文传输,安全性便没有什么可言,API交互时,所有参数交互,均采用加密信息进行传输。这样即使别人采用抓包工具,抓取相关信息,看到的也都是加密后的东西,数据传输安全性会提高不少。

因本人编程方面还属于小白吧,c及c++方面的东西没精力去学习了解,这里只贴出WEB端PHP实现的加解密方法,PC端软件需要采用相同原理,不然解密出来就是一串乱码。

别的不扯了,直接上代码:

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
<?php

class Crypter
{
private static $key = 'yefeng_blog';

public static function setKey($key)
{
self::$key = $key;
}

public static function encrypt($txtStream)
{
//密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_,
$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdef+IJK6/7nopqr89LMmGH012345uv';
//随机找一个数字,并从密锁串中找到一个密锁值
$lockLen = strlen($lockstream);
$lockCount = rand(0,$lockLen-1);
$randomLock = $lockstream[$lockCount];
//结合随机密锁值生成MD5后的密码
$password = md5(self::$key.$randomLock);
//开始对字符串加密
$txtStream = base64_encode($txtStream);
$tmpStream = '';
$i=0;$j=0;$k = 0;
for ($i=0; $i<strlen($txtStream); $i++) {
$k = ($k == strlen($password)) ? 0 : $k;
$j = (strpos($lockstream,$txtStream[$i])+$lockCount+ord($password[$k]))%($lockLen);
$tmpStream .= $lockstream[$j];
$k++;
}
return $tmpStream.$randomLock;
}

public static function decrypt($txtStream)
{

$lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdef+IJK6/7nopqr89LMmGH012345uv';

$lockLen = strlen($lockstream);
//获得字符串长度
$txtLen = strlen($txtStream);
//截取随机密锁值
$randomLock = $txtStream[$txtLen - 1];
//获得随机密码值的位置
$lockCount = strpos($lockstream,$randomLock);
//结合随机密锁值生成MD5后的密码
$password = md5(self::$key.$randomLock);
//开始对字符串解密
$txtStream = substr($txtStream,0,$txtLen-1);
$tmpStream = '';
$i=0;$j=0;$k = 0;
for($i=0; $i<strlen($txtStream); $i++){
$k = ($k == strlen($password)) ? 0 : $k;
$j = strpos($lockstream,$txtStream[$i]) - $lockCount - ord($password[$k]);
while($j < 0){
$j = $j + ($lockLen);
}
$tmpStream .= $lockstream[$j];
$k++;
}
return base64_decode($tmpStream);
}
}

encrypt是加密算法,decrypt是解密算法,setKey就不多说了,相信看到就懂得了。下面是加解密例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

include('./Crypter.php');
Crypter::setKey('test');
$json = json_encode(
array(
'name' => 'testName',
'value' => 'testValue',
)
);
$encode = Crypter::encrypt($json);
echo "加密后:".$encode."\n";
$decode = Crypter::decrypt($en);
echo "解密后:".$decode."\n";