0

我正在通过 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;
}
4

1 回答 1

1

要使字符串可以安全地通过 URL,请使用encodeURIComponent(your_string_here)

于 2012-12-15T16:55:26.530 回答