这篇文章主要介绍了php源码分析之DZX1.5加密解密函数authcode用法,实例分析了DZX1.5中authcode函数加密与解密的使用技巧,需要的朋友可以参考下
<?php
$authkey
=
''
;
/**
* @param string $string: 输入的需要加密(或解密)的明文(或密文)
* @param string $operation: 'DECODE'或其它,其中默认表示解密,输入其它表示加密
* @param string $key: 加解密密钥
* @param int $expiry: 有效期
*/
function
authcode(
$string
,
$operation
=
'DECODE'
,
$key
=
''
,
$expiry
= 0) {
global
$authkey
;
$ckey_length
= 4;
$key
= md5(
$key
!=
''
?
$key
:
$authkey
);
$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)) {
return
substr
(
$result
, 26);
}
else
{
return
''
;
}
}
else
{
return
$keyc
.
str_replace
(
'='
,
''
,
base64_encode
(
$result
));
}
}
$str
=
'1234'
;
$key
=
'1234'
;
echo
"明文:"
.
$str
;
echo
"<br />"
;
echo
"密钥:"
.
$key
;
$encode
= authcode(
$str
,
'11'
,
$key
);
echo
"<br />"
;
echo
"加密后的密文:"
.
$encode
;
echo
"<br />"
;
$decode
= authcode(
$encode
,
'DECODE'
,
$key
);
echo
"解密后的明文:"
.
$decode
;
/*End of php*/
运行结果如下:
明文:1234
密钥:1234
加密后的密文:a52f67eXZGVy0HtQBo4vOREhq3WxnL6E2zlx75JGfoJW
解密后的明文:1234
希望本文所述对大家的php程序设计有所帮助。