2013-08-23 63 views
0

我使用密碼不僅signIn而且加密。 登錄密碼被加密md5。 如果我遺失/忘記了密碼。我怎樣才能解密我的數據?例如密碼重置和加密解密關係在PHP中

。用戶使用密碼登錄= 1234. 如果登錄=>使用該密碼解密數據。

我不想在userdata中保存我的密碼以解決用戶隱私問題。 我想讓用戶相信他們的數據只能自己閱讀。

如果用戶更改密碼,我該如何解密加密數據? 因爲密碼是加密解密的關鍵。

謝謝。

+2

根據定義的成本,你不能正確解密加密的數據,如果你已經失去了密碼。要實現這一點的唯一方法是*您*將實際密碼存儲在服務器上。但是,TNO(不信任任何人)的安全性是沒有意義的。用戶既可以控制他的數據,也可以控制所有的責任,或者你可以。 – deceze

+0

你不能。如果您使用某些密鑰來正確加密/解密數據並丟失該密鑰,那麼該數據毫無價值,您需要重新捕獲數據並使用新密碼對其進行重新加密。另外請不要使用md5來存儲密碼哈希值。如果有人只更改密碼,您可以在之前要求提供舊密碼,請參閱[md5()手冊頁](http://php.net/manual/en/function.md5.php)上關於使用md5密碼散列的注意事項 – Anigel

+0

然後使用舊密碼進行解密並再次使用新密碼進行加密。 – Christoph

回答

1

如果您正在使用的密碼作爲解密密鑰,並且您丟失了密碼,那麼就沒有辦法恢復數據。如果你使用這種方法,那麼你需要非常小心,不要丟失密碼。

在這種特殊情況下,您可以嘗試暴力破解密碼的MD5ed副本。 MD5 is very weak, and unsuitable for storing hashed passwords

+0

你好Quentin, 感謝您的快速回復。如果還有其他方法需要建議?規則是「用戶只能插入密鑰」。 crypt密鑰不會存儲在數據庫中。 – user2710326

+0

安全問題或用戶電子郵件怎麼樣?任何接受? – user2710326

+0

安全問題有什麼用?這些可以用來幫助確定你是否應該給用戶一個新的密鑰......但你無法創建一個新的密鑰。 – Quentin

0

在你目前的計劃中顯然不可能這樣做。不過你也許可以解決它。你需要的是爲你的方法增加額外的層次。

首先,用隨機生成的密鑰對用戶數據進行加密。這個密鑰將是數據加密密鑰。現在您可以使用任何其他鍵或密鑰對此密鑰進行加密。其中一個密鑰將從用戶密碼生成(通過SSL發送,在服務器上使用PBKDF2從密碼中派生密鑰)。

現在您可以考慮替代方案來解密數據加密密鑰。一個是使用從標準密碼恢復短語(寵物的名字+母親的年齡)派生的密鑰。另一種方法是使用公鑰對密鑰進行加密,並將私鑰安全地存儲在金庫中。加密數據密鑰的安全性當然等於最不安全的密鑰加密密鑰。

加密數據的一個非常大的步驟。用戶無法確定您對數據不做任何處理,因爲您是提供(網絡)應用程序的用戶。因此,認爲用戶不應該信任你是一個矛盾。這可能是更值得思考免受攻擊的數據的安全(數據庫安全),防盜等