作者:小炮兵开坦克 | 来源:互联网 | 2018-03-12 11:56
在开发PHP系统时,会员部分往往是一个必不可少的模块,而密码的处理又是不得不面对的问题,PHP 的 Mcrypt 加密库又需要额外设置,很多人都是直接使用md5()函数加密,这个方法的确安全,但是因为md5是不可逆加密,无法还原密码,因此也有一些不便之处,本文介绍加密函数支持私钥,用起来还是不错的.
代码如下:
PHP:
代码如下:
// 说明:PHP 写的加密函数,支持私人密钥
// 整理:http://www.jb51.net
function
keyED(
$txt
,$encrypt_key
)
{
$encrypt_key
= md5
(
$encrypt_key
)
;
$ctr
=0
;
$tmp
= ""
;
for
(
$i
=0
;$i
(
$txt
)
;$i
++)
{
if
(
$ctr
==strlen
(
$encrypt_key
)
)
$ctr
=0
;
$tmp
.= substr
(
$txt
,$i
,1
)
^ substr
(
$encrypt_key
,$ctr
,1
)
;
$ctr
++;
}
return
$tmp
;
}
function
encrypt(
$txt
,$key
)
{
srand
(
(
double)
microtime
(
)
*1000000
)
;
$encrypt_key
= md5
(
rand
(
0
,32000
)
)
;
$ctr
=0
;
$tmp
= ""
;
for
(
$i
=0
;$i
(
$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
keyED(
$tmp
,$key
)
;
}
function
decrypt(
$txt
,$key
)
{
$txt
= keyED(
$txt
,$key
)
;
$tmp
= ""
;
for
(
$i
=0
;$i
(
$txt
)
;$i
++)
{
$md5
= substr
(
$txt
,$i
,1
)
;
$i
++;
$tmp
.= (
substr
(
$txt
,$i
,1
)
^ $md5
)
;
}
return
$tmp
;
}
$key
= "www.yitu.org"
;
$string
= "我是加密字符"
;
// encrypt $string, and store it in $enc_text
$enc_text
= encrypt(
$string
,$key
)
;
// decrypt the encrypted text $enc_text, and store it in $dec_text
$dec_text
= decrypt(
$enc_text
,$key
)
;
print
"加密的 text : $enc_text
"
;
print
"解密的 text : $dec_text
"
;
?>
每一次加密后的结果是不一样的,大大加强了密码的安全性.