2013-06-23 76 views
0

這似乎有些微不足道,但我花了一點時間搜索而沒有結果。無論如何,我正在開發一個Web應用程序,我需要將敏感數據存儲在mysql數據庫中,然後通過python訪問它來驗證api調用。我不是安全專家,但對散列和加密有基本的瞭解。從python訪問散列mysql密碼

我知道如何使用aes_decrypt aes_encrypt加密數據,我也知道如何使用mysql提供的password()函數對數據進行散列。

我的第一個問題是我應該加密這些數據還是散列它?我的第二個問題是我不知道如何在Python中使用password()函數對它進行哈希處理,然後在python中「訪問」或「使用」密碼信息。

任何幫助,非常感謝。

+0

您是否想在您的Web服務器和數據庫服務器之間傳輸時(即使用安全通信通道)安全地保存您的數據(即在數據庫級加密)和/或保護您的數據? –

+0

由於Web應用程序正在存儲用戶提供的數據,因此我希望保護它從Web應用程序傳輸到數據庫,並在數據庫存儲在數據庫中時進行哈希處理,以防有人訪問服務器。 – lawless

+0

由於「哈希」是一個從可變長度數據到固定長度數據的映射,所以不能將_data_存儲/交換爲[hash](http://en.wikipedia.org/wiki/Hash_function) - 引入某種數據丟失。否則,「散列」(在一般情況下)是不可逆的。您無法從哈希中獲取原始數據。您可能在此尋找[加密](http://en.wikipedia.org/wiki/Encryption)。 –

回答

0

首先,我不是Python專家,我的答案只是針對一般方法。

Web應用程序中的密碼通常以散列形式存儲,而不是加密的,這基本上讓人們在表受到威脅時難以獲取密碼。哈希應該儘可能地生成。請不要只是一個MD5,更好地使用更安全的東西(從今天的角度來看),並適當地用鹽,以儘量減少彩虹攻擊的風險。

我不會爲此使用MySQL​​函數。該documentation說:

的PASSWORD()函數在MySQL服務器 使用的認證系統;你不應該在你自己的應用程序中使用它。對於 的用途,請考慮MD5()SHA2()

如果你想用MySQL進行哈希處理,可以留下SHA2(),不過不要忘記在哈希前加鹽。我的做法是將字符串與您的應用程序進行散列(請參閱python hashli b以供參考),salt it like this,然後將散列存儲在數據庫中。這可以避免應用程序和數據庫服務器之間的數據安全問題。