2011-01-11 46 views
3

這是我的第一個問題:對PHP和Java中的短字符串進行安全加密

我希望PHP腳本在每個頁面上包含加密的用戶ID。然後,我將使用JS讀取它並將其發送到Java服務器,在該服務器中解碼值。

我想讓它安全,以便人們不能僞造他們的ID。 (不要擔心,這將不會用於身份驗證。)

加密的ID可能是MySQL的自動增量列1,2,3 ..並且我無法改變它。

這些屬性將是不錯的有:

  • 經過加密的ID應該是唯一有效的一天,最好是一次性使用的/第二
  • 經過加密的ID不應該被輕易僞造(理想甚至由用戶自己)

隨意建議其他類型的解決方案。謝謝!

+3

您是否確實需要使用Java解碼ID,或者您是否僅僅需要它來進行比較/數據庫查找?如果你不需要解碼它,散列可能是一個更直接的方法。 – jerluc 2011-01-11 09:06:45

+0

是的,我需要重視在服務器上解碼。我有一個拼寫錯誤,我說我會用JavaScript解碼,對不起! – hakunin 2011-01-11 09:22:31

+0

這聽起來像你正試圖重新實施一個會議。有沒有什麼理由不想爲此使用它們?這樣,你不必傳遞一個ID,其他人不會輕易僞造他們,而不會劫持另一個用戶的會話(HTTPS很好地解決了這個問題)。 – Hiro2k 2011-01-11 09:42:53

回答

3

使用安全散列函數來散列用戶ID和週期性更改的某個值的組合可能是一個好主意。例如,您可以每天選擇一個128位的隨機數,然後將該ID設置爲與該用戶ID連接的值的散列。假設你使用了一個很好的哈希,比如SHA-256,這是加密安全的。

0

我想不出任何安全解密只有JavaScript,因爲你需要在源代碼中包含密碼,這不是很安全。

最好的方法是加密和用PHP解密:(使用AJAX),你可以從JavaScript代碼中調用PHP

因此,舉例來說:

encrypt.php

<?php 
    $password = "KEYVALUE"; 
    $secret_text = "USERID HERE" 
    $encrypted_text = mcrypt_ecb(MCRYPT_DES, $password, $secret_text, MCRYPT_ENCRYPT); 
    echo $encrypted_text; 
?> 

然後你有一個叫decrypt.php的東西,接受一個GET參數,唯一的輸出是解密的文本(沒有HTML代碼或任何東西)。從技術上講,你可能應該使用XML作爲AJAX,但因爲它只是一個值...)

decrypt.php

<?php 
    $password = "KEYVALUE"; 
    $decrypted_text = mcrypt_ecb(MCRYPT_DES, $password, $_GET['decrypt'], MCRYPT_DECRYPT); 
    echo $decrypted_text; 
?> 

你可以通過調用

decrypt.php測試了這一點?解密= encrypted_string

從這裏我可以在JavaScript中調用「decrypt.php?decrypt = encrypted_string」腳本,然後JavaScript可以讀取解密後的值。

AJAX的快速入門可以在這裏找到:http://www.yourhtmlsource.com/javascript/ajax.html

1

沿用戶ID標記時間戳的方法可能是最好的,並檢查給出的時間戳與當前時間戳之間的時間差。您必須確保差異接受度足夠大,以解決任何服務器延遲問題。

相關問題