GB | BIG5
|
| 首頁 > 應用技術 > Apache > 正文 |
 |
| 用Perl來管理Apache驗証身份時所用的密碼 |
| 仙人掌工作室 編譯 (2001-05-16 14:08:00) |
本文介紹如何用Perl來管理Apache驗証身份時所用的密碼,包括如何加密密碼,如何修改文本文件、DBM數據庫、MySQL數據庫中的用戶記錄,等等。
一、加密密碼(3月26日)
前面三篇文章討論了在Apache上實現身份驗証的各種方法,即如何在用戶訪問某些受保護的資源時顯示一個要求輸入名字和密碼的對話框。手工管理密碼往往是非常麻煩的,這裡要介紹的就是一些通過Perl自動維護密碼列表的方法。
注意:本文假定你已經具備一些Perl的基礎知識。如果你還沒有聽說過Perl,下面是一個簡單的介紹:Perl是一種編程語言。它是一種非常流行的編程語言,在文本處理、端口通信、協調多個不同應用以及完成其他諸多任務時都受到人們的歡迎。Perl同時也是一種頗有名氣的流行CGI編程語言,不過這只是Perl諸多應用中的一種。
在用戶和密碼的管理中,掌握加密密碼的方法是非常必要和有用的。Perl提供了一個內建的函數來完成這一任務,這個函數就是crypt。要使用這個函數,你必須先搞清楚下面這些問題。
首先,正如以前的一篇文章所提到的,Apache以“Unix crypt”格式保存密碼,用Perl的crypt函數加密字符串得到的也是這種格式。為加密字符串,我們需要一個稱為“salt”的字符串,它是兩個(或者兩個以上)字符構成的字符串,用啟動加密過程。salt一般是隨機生成的,根據所選salt的不同加密字符串之得到的結果也不同。
在Perl程序中調用crypt函數的形式如下所示:
$encrypted = crypt ($password, $salt);
上例假定$password已經由用戶通過某種方式提供,$salt已經通過某種方式生成。請參見下面的更多說明。
crypt是一種不可逆的加密算法,也就是說,一旦我們加密了一個字符串就沒有辦法把它還原得到原來的字符串。這意味著,要知道用戶輸入的密碼是否和正確的密碼一樣,唯一的方法是把用戶輸入的密碼也加密,看看加密結果是否和正確密碼的加密結果一樣。當然,兩次加密所用的salt應該一樣。crypt函數把加密所用的salt作為加密結果的前兩個字符保留,所以我們可以用如下代碼驗証用戶輸入的密碼是否正確:
$guess_encrypted = crypt ($guess, $encrypted);
if ($guess_encrypted eq $encrypted) {
print "密碼正確.\n";
}
else {
print "密碼錯誤.\n";
}
當我們為salt指定一個具體的字符串時,Perl知道且只使用該字符串的前面兩個字符:
順便說一下,如果要自己生成salt,我們可以使用下面的代碼:
@a=(0..9,&single;a&single;..&single;z&single;);
$pass = join &single;&single;, map { $a[int rand @a] } (0..1);
這段代碼生成了一個由兩個字符構成的字符串,字符可能是字母也可能是數字。當然,和Perl中的其他許多事情一樣,我們還可以使用其他各種方法生成salt。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
|
|
|
|
 |
★ 樊強制作 歡迎分享 ★ |