本文实例讲述了php实现可逆加密的方法。分享给大家供大家参考。具体如下:
这里介绍的可以逆转加密类,没有密钥很难破解。
PHP代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php
class encryptCalss
{
var $key =12;
function encode( $txt ){
for ( $i =0; $i < strlen ( $txt ); $i ++){
$txt [ $i ]= chr (ord( $txt [ $i ])+ $this ->key);
}
return $txt =urlencode( base64_encode (urlencode( $txt )));
}
function decode( $txt ){
$txt =urldecode( base64_decode ( $txt ));
for ( $i =0; $i < strlen ( $txt ); $i ++){
$txt [ $i ]= chr (ord( $txt [ $i ])- $this ->key);
}
return $txt ;
}
}
?>
|
discuz加密解密:
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
|
<?php
/**
*
* @param string $string 原文或者密文
* @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
* @param string $key 密钥
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
* @example
* $a = authcode('abc', 'ENCODE', 'key');
* $b = authcode($a, 'DECODE', 'key'); // $b(abc)
*
* $a = authcode('abc', 'ENCODE', 'key', 3600);
* $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空
*/
function authcode( $string , $operation = 'DECODE' , $key = '' , $expiry =0){
$ckey_length =4;
$key =md5( $key ? $key : "kalvin.cn" );
$keya =md5( substr ( $key ,0,16));
$keyb =md5( substr ( $key ,16,16));
$keyc = $ckey_length ? ( $operation == 'DECODE' ? substr ( $string ,0, $ckey_length ): substr (md5(microtime()),- $ckey_length )): '' ;
$cryptkey = $keya .md5( $keya . $keyc );
$key_length = strlen ( $cryptkey );
$string = $operation == 'DECODE' ? base64_decode ( substr ( $string , $ckey_length )):sprintf( '%010d' , $expiry ? $expiry +time():0). substr (md5( $string . $keyb ),0,16). $string ;
$string_length = strlen ( $string );
$result = '' ;
$box =range(0,255);
$rndkey = array ();
for ( $i =0; $i <=255; $i ++){
$rndkey [ $i ]=ord( $cryptkey [ $i % $key_length ]);
}
for ( $j = $i =0; $i <256; $i ++){
$j =( $j + $box [ $i ]+ $rndkey [ $i ])%256;
$tmp = $box [ $i ];
$box [ $i ]= $box [ $j ];
$box [ $j ]= $tmp ;
}
for ( $a = $j = $i =0; $i < $string_length ; $i ++){
$a =( $a +1)%256;
$j =( $j + $box [ $a ])%256;
$tmp = $box [ $a ];
$box [ $a ]= $box [ $j ];
$box [ $j ]= $tmp ;
$result .= chr (ord( $string [ $i ]) ^ ( $box [( $box [ $a ]+ $box [ $j ])%256]));
}
if ( $operation == 'DECODE' ){
if (( substr ( $result ,0,10)==0|| substr ( $result ,0,10)-time()>0)&& substr ( $result ,10,16)== substr (md5( substr ( $result ,26). $keyb ),0,16)){
returnsubstr( $result ,26);
} else {
return '' ;
}
} else {
return $keyc . str_replace ( '=' , '' , base64_encode ( $result ));
}
}
?>
|
希望本文所述对大家的php程序设计有所帮助。