2011-04-20 57 views
3

基本上,我有一個Ajax窗體,攜帶登錄信息,有沒有什麼辦法可以加密密碼,然後在它發送ajax然後解密它在PHP?Javascript和PHP的加密/解密

或者我應該看看它的其他方式?

非常感謝:)

回答

4

沒有理由在JavaScript或PHP中執行任何加密作爲適當的解決方案是使用SSL(HTTPS)。現在,您甚至可以獲得在所有瀏覽器中信任的證書for free,因此沒有理由不使用SSL。

如果由於某種原因無法使用SSL,則可以獲得RSA的JavaScript實現,以便您可以在本地對其進行加密,但只有您的服務器能夠再次對其進行解密。

+0

偉大的資源。謝謝。 – Joshwaa 2011-04-20 11:44:32

2

你可以使用RC4,因爲我知道那裏有它的PHP和JavaScript的實現。但是,對於任何類型的加密,您都必須離開密鑰客戶端(因此可以對其進行加密),這意味着任何訪問您的頁面的人都可以獲得密鑰並對其進行解密(從而破壞該點)。

將客戶端哈希(然後在PHP中匹配哈希值,如果您不需要知道密碼)或使用公私密鑰加密(如RSA),您可能會更好一些,這樣客戶端可以加密,但不能解密它。

對於散列,請看hash()sha1 for Javascript

而對於RSA,看看這個博客帖子http://www.sematopia.com/2008/10/rsa-encrypting-in-javascript-and-decrypting-in-php/

+0

感謝您的信息。 – Joshwaa 2011-04-20 11:31:58

0

你不能以一種安全的方式。您應該使用https

0

您可以在JS和PHP中使用md5(password),然後比較加密的密碼。

由於用戶名未加密,您可以使用它從PHP中的數據庫取得密碼,然後對其進行加密。

最好的辦法是:

  • 產生uniqid,將其保存在$_SESSION['crypt_key'],並把它作爲Ajax窗體上的隱藏輸入;
  • 在發送之前使用md5(crypt_key + password)加密JS;
  • 使用md5($_SESSION['crypt_key'] . $password)在PHP中進行加密並進行比較。這樣,每個請求都會傳輸一個不可預知的加密密碼。