ホームページ  >  記事  >  バックエンド開発  >  クラシック PHP 暗号化および復号化関数 Authcode() 修復バージョン code_PHP チュートリアル

クラシック PHP 暗号化および復号化関数 Authcode() 修復バージョン code_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:57:58817ブラウズ

古典的な PHP 暗号化および復号化関数 Authcode() のコードを修復します

この関数は Discuz プログラムから来ており、キーと有効期限を設定するために使用されます。多くの場合、どれも役に立ちます。元の関数コードでは +、/、& などの文字が生成される場合があり、これらの文字は URL を通じて値が返されるときにエスケープされ、復号化できなくなります。 Fireend Network はわずかな修正を加え、これらの文字を他の文字に置き換え、復号化時に元に戻しました。そのため、完璧でした。

コードは次のとおりです:

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

関数 authcode($string, $operation = 'DECODE', $key = '', $expiry = 0){

if($operation == 'デコード') {

$string = str_replace('[a]','+',$string);

$string = str_replace('[b]','&',$string);

$string = str_replace('[c]','/',$string);

}

$ckey_length = 4;

$key = md5($key ? $key : 'livcmsencryption ');

$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);

$結果 = '';

$box = range(0, 255);

$rndkey = 配列();

for($i = 0; $i

$rndkey[$i] = ord($cryptkey[$i % $key_length]);

}

for($j = $i = 0; $i

$j = ($j + $box[$i] + $rndkey[$i]) % 256;

$tmp = $box[$i];

$box[$i] = $box[$j];

$box[$j] = $tmp;

}

for($a = $j = $i = 0; $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 == 'デコード') {

if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5 (substr($result, 26).$keyb), 0, 16)) {

substr($result, 26);

を返す

} 他 {

戻る '';

}

} 他 {

$ustr = $keyc.str_replace('=', '',base64_encode($result));

$ustr = str_replace('+','[a]',$ustr);

$ustr = str_replace('&','[b]',$ustr);

$ustr = str_replace('/','[c]',$ustr);

$ustr を返す;

}

}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/979237.html技術記事古典的な PHP 暗号化および復号化関数 Authcode() 修復バージョン コード Authcode は、Discuz プログラムから来ており、文字列の暗号化と復号化に使用されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。