2012-01-18 198 views
0

我們有一些使用密碼登錄系統的腳本。這些密碼存儲在ini文件中並由腳本(Perl)使用。密碼加密和密碼存儲 - Perl

我想存儲加密的密碼(不知道到現在使用的封裝)和解密相同的Perl代碼的。

但在邏輯上並不有意義的存儲加密的密碼和代碼解密邏輯。

這些文件在源代碼管理中,可以被大多數用戶訪問。想知道什麼可能是更好的方法。

我就用我可以用這模塊歡迎:-)

感謝

KARTHIK

附註:Perl和任何建議Perl文件是在服務器中運行的預定腳本,存儲在源代碼管理工具中。除了可以在用戶訪問soruce控件時查看這些腳本之外,用戶與這些腳本沒有交互。

+0

從閱讀ini文件後你是否需要純文本密碼這個問題還不清楚。如果你需要密碼,那麼加密它們的原因並不多。你的程序應該以某種方式對它們進行解密,並且可能人們有權訪問該代碼,這樣人們可以在需要時解密密碼。澄清你的問題。 – ruz 2012-01-18 09:13:23

回答

2

我認爲你不應該解密密碼。你應該存儲md5密碼的總和,然後當用戶想要登錄時,你計算他輸入的密碼的md5總和,並將它與你的文件中的內容進行比較。

當然還有其他的方法然後MD5,其僅僅是一個例子。您可以使用SHA或任何其他單向散列方法。

使用這種方法讓你無法恢復忘記的密碼,你必須生成一個新的以取代被遺忘的一個。

我不知道的Perl,但我敢打賭,有MD5或SHA-1的可用的實現。

+0

實際上這些都是Perl中的預定腳本,沒有用戶交互。 – KK99 2012-01-18 07:49:10

+2

@KarthikKrishnan:這沒什麼區別。馬克克描述的策略仍然有效。沒有理由不管怎樣你都必須解密密碼。如果你這樣做,爲什麼還要打擾他們呢? – flesk 2012-01-18 08:27:38

+1

Perl將C函數'crypt「的實現作爲內置和'Digest :: MD5'和'Digest :: SHA'作爲核心模塊。 – flesk 2012-01-18 08:30:45

4

這實際上與Perl沒有多大關係。你將主要使用shell和文件系統。

如果你需要一個密碼來訪問遠程服務,你必須保存它。無論是否加密,它們都必須放置在某個地方,可能放在磁盤上,尤其是不在用戶會話中運行(例如GNOME)。

在公共VCS中存儲密碼是一個非常糟糕的主意。您應該只保留您的代碼並將密碼存儲在VCS dirs以外的單獨文件中。例如,如果您有/opt/some-project/scripts中的回購副本,請將密碼文件放在其旁邊,/opt/some-project/passwd

最重要的問題是passwd文件的文件權限。只有擁有者才能訪問,根是最好的。

cat /opt/some-project/passwd | sudo -U <user> perl /opt/some-project/run-with-passwd-on-stdin 

其中<user>是用戶(不是root!)你想運行你的腳本,腳本接收的密碼文件爲標準:

然後,在你的根的crontab運行這樣一個腳本輸入。

這樣,只要文件權限正確且root帳戶不受影響,密碼文件就會受到保護。