我正在通过 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中转义字符串中的字符时是否需要考虑其他可能性。似乎=
顺利通过了。这种编码类型使用的其他字符是否可能会成为问题?
PS我实际上并没有在javascript中进行任何加密,这一切都在服务器上处理,但在这个特定的例子中,我需要javascript中的加密密码,因为我需要在服务器端进行比较......我不会进入所有无聊的细节。但是,我还将通过一个查询字符串传递这个加密密码,我认为它会被 a+
或=
. 我如何在查询字符串中传递这样的字符串?
更新:我用来加密密码的编码算法如下。我可能误认为它只是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;
}