我通過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;
}
base64編碼是不加密的。這不比發送明文密碼更安全。 –
我應該用什麼來代替? – ryandlf
使用HTTPS登錄 – Malvolio