我通过json和查询字符串传递加密密码。让我们举例来说,密码类似于:V0VuDF9ITK+A744HD=
当我通过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中的加密密码,因为我需要比较服务器端...我不会陷入所有的无聊细节。然而,我将通过查询字符串传递此加密密码,我认为这将由+
或=
引发。我如何在查询字符串中传递这样的字符串?
更新:我用来加密密码的编码方法如下。我可能误以为它只是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 :(得分:1)
要使字符串安全通过网址,请使用encodeURIComponent(your_string_here)