2012-12-15 81 views
0

我通過json和查詢字符串傳遞加密密碼。舉例來說,例如,密碼是這樣的:V0VuDF9ITK+A744HD=通過JSON傳遞非數字/字母的字符串

當我通過json傳遞字符串時,我使用JSON.stringify來串化字符串,以便它可以在服務器上使用。

var request = sb.serverRequest('changePassword', JSON.stringify({username: username, password: credentialsInput.value, original: password})); 
request.done(function() { 
    var response = JSON.parse(request.responseText); 
    if(response.success) { 
     console.log('password changed'); 
    } else { 
     setInstructions('That didn\'t work. Please try again.'); 
    } 
    credentialsInput.value = ''; //Clear input 
}); 

然而,當我嘗試使用服務器上的密碼,它已經用空格代替了+所以新的密碼將是V0VuDF9ITK A744HD=(注意中間的空間)?我如何預分析java中的字符串,以便它包含實際字符串中傳遞的非字母和數字?它似乎將字符串傳遞給JavaScript很好,但我更喜歡在java中預處理,如果可能的話,因爲也有我會通過查詢字符串傳遞字符串的情況。

我在java中使用base64編碼器進行加密,所以我不確定在javascript中字符串中的字符轉義時是否還有其他可能需要考慮。看起來=得到通過罰款。這種編碼類型使用的其他字符是否可能會成爲問題?

P.S.我實際上並沒有在JavaScript中進行任何加密,這都是在服務器上處理的,但在這個特定實例中,我需要在JavaScript中加密的密碼,因爲我需要比較它的服務器端...我不會陷入所有無聊細節。然而,我將通過查詢字符串傳遞這個加密密碼,我認爲這將由+=發生故障。我如何在querystring中傳遞一個字符串呢?

更新:我用來加密密碼的編碼algorthm如下。我可能錯誤地認爲它只有base64。這是保護密碼安全的方法嗎?

public static synchronized String encrypt(String plainText) throws RuntimeException { 
    MessageDigest md = null; 

    try{ 
     md = MessageDigest.getInstance("SHA"); 
    }catch(NoSuchAlgorithmException e){ 
     throw new RuntimeException(e.getMessage()); 
    } 

    try{ 
     md.update(plainText.getBytes("UTF-8")); 
    }catch(UnsupportedEncodingException e){ 
     throw new RuntimeException(e.getMessage()); 
    } 

    byte raw[] = md.digest(); 
    String hash = (new BASE64Encoder().encode(raw)); 
    return hash; 
} 
+0

base64編碼是不加密的。這不比發送明文密碼更安全。 –

+0

我應該用什麼來代替? – ryandlf

+0

使用HTTPS登錄 – Malvolio

回答

1

爲了使串安全的通過一個URL,使用

+0

當字符串通過querystring傳遞給javascript時怎麼樣? – ryandlf

+0

'decodeURIComponent',還有什麼? –

+0

好極了。所以當這個url從java傳遞到javascript時。如果字符串中有+和=等字符,我會不會有問題從查詢字符串獲取值?比方說,網址是變化?pass = A87DF + 7RU7 = user = foo。 – ryandlf