發新話題

用Perl生成隨機密碼

用Perl生成隨機密碼

如果你是一名系統管理員或者Web開發人員,你可能已經知道強度不夠的用戶密碼是最大網絡安全風險之一。強度不夠的密碼——比如,使用用戶的名字或者生日作密碼——通常都可以利用複雜的用戶嗅探工具「破解」,這樣未經授權的用戶就可以很容易地從後門進入服務器。這就是為什麼很多管理員都會定期檢查用戶密碼,以確保它們的安全性足以抵禦住一次進攻。根據所需要的安全級別,有一些管理員甚至會對密碼進行進一步的處理:他們會自己生成並指定用戶密碼。 但是,自動地生成用戶密碼有些棘手——密碼必須足夠簡單,容易記住,但是又不能太簡單,否則就很容易被破解。Internet上有很多算法可以用來幫助你生成一個安全的、可以拼讀的密碼;然而,如果你交工的最終期限即將到來,或者你沒有多少開發經驗,你並不是總是能夠實現這些解決方案。 但是,現在就有一個解決方案。CPAN有很多自動生成密碼的模塊,能夠讓你輕鬆地在應用程序裡加入這項功能。這些模塊都是很先進的工具——你可以自定義密碼的長度、允許輸入的字符、最終密碼的「可拼讀性」,以及其他屬性。這類模塊中有兩個很有意思,我們下面就要討論它們。 The String::MkPasswd模塊 String::MkPasswd模塊提供了一個簡單的API,用來隨機生成不可拼讀的密碼。要在Perl裡使用它,就要進行下面這些步驟: 1. 安裝這個模塊 安裝String::MkPasswd的最簡單方法是使用CPAN命令解釋器,輸入下面的命令: shell> perl -MCPAN -e shell cpan> install String::MkPasswd 如果使用CPAN命令解釋器,那麼相關性就會被自動下載。 或者,你可以下載這個模塊。一旦把下載文檔裡的文件解壓到臨時目錄裡,你就要運行下面這些命令: shell> perl Makefile.PL shell> make shell> make install 如果Perl發現有相關性丟失,它會中斷這一過程,並顯示錯誤;那麼你就應該安裝丟失的文件並重試。如果所需要的文件都有了,那麼上面的命令就會被編譯,並把這個模塊安裝到你的Perl模塊目錄下。 2. 確定密碼的屬性 在編寫代碼之前,你必須確定密碼的一些重要屬性。String::MkPasswd讓你可以控制: * 密碼的長度; * 數字的數量; * 大寫和小寫字符的數量; * 特殊標點符號的數量; 在大多數情況下,你希望密碼有8到15個字符長,而且希望一般的字符中間還包含相當的數字和特殊字符。要記住的是,密碼越隨機,它就越難被破解! 3. 生成密碼 一旦確定密碼需要是什麼樣的,你就可以調用String::MkPasswd模塊的mkpasswd()函數來生成密碼,見列表A。 列表A #!/bin/perl # import module use String::MkPasswdqw(mkpasswd); # print custom password print mkpasswd(-length => 13, -minnum => 4, -minlower => 4, -minupper => 2, -minspecial => 3); 在本文裡,所生成的密碼有13個字符長,其中包括4個數字、4個小寫字符、2個大寫字符和3個標點。下面就是一個輸出的例子: w)d9V;7kz64&Y 每次調用mkpasswd()的時侯,你會得到一個不同的結果。所以,如果有大量的密碼要生成,你可以就把對mkpasswd()的調用放到一個循環裡,並處理每次運行的結果。 提示:如果這看起來太麻煩,你還可以不使用任何參數就調用mkpasswd()生成一個默認的9位數的密碼。 Crypt::RandPasswd模塊 String::MkPasswd模塊可以生成很安全但是非常難以記住的密碼。如果你更希望生成可以拼讀和容易記憶的密碼,那就考慮Crypt::RandPasswd模塊吧。這個模塊是自動密碼生成器(Automated Password Generator)的一個實現,你可以用下面的步驟來使用它: 1. 安裝這個模塊 你可以用CPAN命令解釋器來安裝Crypt::RandPasswd,就像下面這樣: shell> perl -MCPAN -e shell cpan> install Crypt::RandPasswd 或者,可以下載這個模塊,並用下面的命令來安裝它: shell> perl Makefile.PL shell> make shell> make install 2. 生成密碼 Crypt::RandPasswd模塊帶有一個word()函數,用來生成可拼讀的隨機密碼。列表B是如何使用它的例子。 列表B #!/bin/perl # use module use Crypt::RandPasswd; # generate password $word = Crypt::RandPasswd->word(5, 10); print $word; word()函數接受兩個自變量:密碼長度的上限和下限。下面就是輸出結果的一個例子: ijantyoph 提示:通過調用letters()方法你可以生成一個含有一串隨機字母字符的密碼,而不需要使用words()方法。 用這兩個模塊中的任何一個都可以提高你網絡系統的安全性……那麼你還等什麼呢?

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。