在開發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
"
;
- ?>
-
每一次加密後的結果是不一樣的,大大加強了密碼的安全性.
http://www.bkjia.com/PHPjc/327520.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327520.htmlTechArticle在開發PHP系統時,會員部分往往是一個必不可少的模組,而密碼的處理又是不得不面對的問題,PHP 的 Mcrypt 加密庫又需要額外設定,很多人都是直...