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'作为公钥去解密,否则无法解密。