java - 通过 JSON 传递非数字/字母的字符串

标签 java javascript base64

我通过 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中转义字符串中的字符时是否需要考虑任何其他可能性。看来 = 顺利通过了。此编码类型使用的任何其他字符是否可能会成为问题?

附注我实际上并没有在 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;
}

最佳答案

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

关于java - 通过 JSON 传递非数字/字母的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894157/

相关文章:

javascript - MVC Core 在客户端添加多个表/表单,如何从服务器端检索数据

javascript - 构建类似 RSVP 的表格(下一个问题基于上一个问题)

swift - 在 SWIFT 中加密和解密

javascript - 将 s3 存储桶策略从 node.js 中的 JSON 转换为 base64

java - 读取证书错误

java - 从 Java 中的 Arraylist 中删除特定元素?

javascript - 在 css/html/js 中制作某种透明玻璃图像

java - 如何使用反射调用外部 jar 内的方法

java - GWT 编译无法运行程序 CreateProcess error=206

java - 无法运行 jacoco 代码覆盖工具