2012-03-16 81 views
0

我試圖從web表單發送用戶名和密碼數據到我的服務器。如何加密發送到服務器的密碼

密碼通過https連接以純文本形式發送,然後在存儲之前在服務器上正確加密(使用python hashlib.sha224),但是我不確定如何以加密格式將密碼文本傳輸到服務器。

我的網絡客戶端是用javascript編寫的,服務器是用python編寫的。

+3

https是加密;你究竟是想要避免讀取數據? – mfrankli 2012-03-16 18:08:31

+0

如果它是一個https連接,那麼問題是什麼? – 2012-03-16 18:09:08

+0

此外,哈希!=加密。 'SHA *'不是加密算法。 – delnan 2012-03-16 18:16:30

回答

1

你必須在JavaScript中加密它。不幸的是,JavaScript不提供任何開箱即用的加密工具,因此您必須使用第三方庫或自行編寫一些內容。

正如其他人所說,HTTPS是爲了加密整個流量,所以也許你不需要額外的東西?但是,如果你這樣做,你可能想看看這個Article,這可能會揭示一些問題。祝你好運 ! :)

0

https加密格式。你很好。

如果你想在客戶端做反正我建議用sha1對它進行散列。這傢伙似乎有一些庫:http://pajhome.org.uk/crypt/md5/-SHA1,sha256,md5等

1

其實你傳輸密碼加密,因爲你使用SSL。 此外您還沒有加密的密碼,您散列服務器上的密碼。

無論如何,你可以使用像jCryption這樣的東西。 crypt-js也可以適合你的目的。
對於python,有一個叫做PyCrypto的加密庫。但是,我與Javascript和Python之間的通信存在一個問題。我嘗試做類似的事情,但是遇到問題。我想我的問題會幫助你。

Include nonce and block count in PyCrypto AES MODE_CTR

但在一般情況下,你已經解決你自己的問題,通過使用HTTPS。

0

將密碼發送到服務器的HTTPS通道提供了足夠好的加密。

但是,您需要更安全的密碼存儲機制。使用像「bcrypt」這樣的算法有數千次哈希迭代(bcrypt稱這爲成本因子,它應該至少爲16,意味着迭代)和隨機「鹽」。這是通過從密碼中導出加密密鑰來實現的,該密碼是一個計算成本很高的過程,然後使用該密鑰來加密一些已知的密文,這些密文被保存用於未來登錄嘗試的比較。

另外,僅在登錄時使用HTTPS是不夠的。您應該將其用於任何需要通過身份驗證的用戶或攜帶身份驗證Cookie的請求。

0

http相反,https是加密協議。您不需要在客戶端和服務器之間進行額外的加密。

SHA224,SHA1MD5不是加密,而是hashing function,這意味着它們是不可逆的。

一些答案建議哈希密碼客戶端。 但是,不可逆並不意味着無法破解。使用明文密碼進行散列處理時,從散列獲取匹配密碼相對容易(例如,請參閱Rainbow tables)。

因此你不應該哈希在客戶端的密碼,但在服務器端選擇了一些任意字符串拼接它(通常被稱爲)和散列結果。

相關問題