WEB交互安全一直是个各大网站的首要解决方案,本文介绍的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
|
<?php /** * PHP加密类 * 琼台博客 */ class Jiami{ // 公钥 protected $key = 'lee' ; private function keyED( $txt , $encrypt_key ){ $encrypt_key = md5( $encrypt_key ); $ctr =0; $tmp = '' ; for ( $i =0; $i < strlen ( $txt ); $i ++){ if ( $ctr == strlen ( $encrypt_key )){ $ctr =0; } $tmp .= substr ( $txt , $i ,1) ^ substr ( $encrypt_key , $ctr ,1); $ctr ++; } return $tmp ; } public function encrypt( $txt , $key = '' ){ if ( empty ( $key )){ $key = $this ->key; } srand((double)microtime()*1000000); $encrypt_key = md5(rand(0,32000)); $ctr =0; $tmp = '' ; for ( $i =0; $i < strlen ( $txt ); $i ++) { if ( $ctr == strlen ( $encrypt_key )){ $ctr =0; } $tmp .= substr ( $encrypt_key , $ctr ,1).( substr ( $txt , $i ,1) ^ substr ( $encrypt_key , $ctr ,1)); $ctr ++; } return $this ->keyED( $tmp , $key ); } public function decrypt( $txt , $key = '' ){ if ( empty ( $key )){ $key = $this ->key; } $txt = $this ->keyED( $txt , $key ); $tmp = '' ; for ( $i =0; $i < strlen ( $txt ); $i ++){ $md5 = substr ( $txt , $i ,1); $i ++; $tmp .= ( substr ( $txt , $i ,1) ^ $md5 ); } return $tmp ; } public function setKey( $key ){ if ( empty ( $key )){ return null; } $this ->key= $key ; } public function getPK(){ return $this ->key; } } |
使用方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php // 先包含加密类 require_once ( 'jiami.class.php' ); // 要加密的字符串 $string = 'http://www.zzvips.com' ; // 实例化加密类 $jiami = new Jiami(); // 设置公钥 $jiami ->setKey( 'qttc' ); // 加密字符串 $enc = $jiami ->encrypt( $string , $jiami ->getPK()); // 解密字符串 $dec = $jiami ->decrypt( $enc , $jiami ->getPK()); echo '<meta charset="utf-8" />' ; echo '加密前 : ' . $string . '<br/>' ; echo '加密后 : ' . $enc . '<br/>' ; echo '解密后 : ' . $dec ; ?> |
页面执行结果
结果1:
结果2:
由以上结果可以看到,每次加密产生的加密字符串都不一样,这是随机的。
解密的时候,需要使用加密时的公钥,否则无法解密。如你这边加密公钥使用‘qttc',解密的时候,也需要使用这个'qttc'作为公钥去解密,否则无法解密。