2013-10-08 58 views
1

鑑於一次性墊是牢不可破的(據我所知,請隨時糾正我),如果我要生成一個墊,並使用此當用戶創建時將相同的填充密碼加密到網站的密碼並將加密的密碼存儲在我的數據庫中,這是一種安全的方法嗎?換句話說,只要沒有人看到墊是什麼,永遠保持這個墊是否可以永久保存?PHP - 使用一次性墊來存儲加密的密碼

我應該使用類似mcrypt的東西嗎?

+0

以及您將如何生成此OTP?大概以編程方式?你如何保持生成方法的祕密?現在您已經將OTP的保證不可破壞性降低到您存儲這些創建說明的地方。 –

+3

一次性頁面中的「一次」意味着給定密鑰僅用於加密單個明文。換句話說,您需要爲每個需要加密的項目單獨填充。這是讓他們牢不可破的東西。由於這些獨立的墊必須存儲在某個地方,因此您很脆弱。相反,使用廣泛使用和測試的庫(如mcrypt)並使用鹽對密碼進行加密。 –

+0

@JacobM如果你張貼作爲答案,我會很樂意接受它。 – imkendal

回答

1

一次性頁面中的「一次」意味着給定的密鑰僅用於加密單個明文。換句話說,您需要爲每個需要加密的項目單獨填充。這是讓他們牢不可破的東西。由於這些獨立的墊必須存儲在某個地方,因此您很脆弱。相反,使用廣泛使用和測試的庫(如mcrypt)並使用鹽加密您的密碼

2

你會用一次性墊做什麼是加密的密碼。加密密碼不是最佳選擇,因爲無論您如何操作,您都可以解密密碼。您的應用程序本身必須能夠訪問密鑰(或密鑰,因爲每個一次性密鑰只能加密一個密碼),因此如果攻擊者擁有足夠的權限,就可以執行攻擊。

這就是爲什麼我們使用散列功能來存儲密碼,他們是單向的,你可以檢查輸入的密碼是否導致相同的散列,但你不能得到原始密碼。 PHP提供函數password_hash()來生成這樣的散列值,它處理所有產生隨機鹽的陷阱並使用緩慢的BCrypt來散列密碼。