【发布时间】:2017-08-01 19:31:54
【问题描述】:
这样做的目的与安全性无关,而且密钥会很长,所以我只想对字符串使用简单的 XOR 加密。
嗯,客户端的Javascript如下:
function dc_encrypt(str, key)
{
var ord = []; var res = "";
var i;
for (i = 1; i <= 255; i++) {ord[String.fromCharCode(i)] = i}
for (i = 0; i < str.length; i++)
res += String.fromCharCode(ord[str.substr(i, 1)] ^ ord[key.substr(i % key.length, 1)]);
return(res);
}
而Java是:
public String dc_decrypt(String str, String key)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length(); i++)
sb.append((char)(str.charAt(i) ^ key.charAt(i % (key.length()))));
return(sb.toString());
}
不幸的是,这会产生一些非常奇怪的结果。在 JS 中加密后,一些字母会有所不同,通过 POST 发送结果并在 Java 中解密。 在每种情况下,它似乎都不可靠。
我认为这个问题一定与编码有关...有人知道更可靠的解决方案吗?
提前非常感谢! :)
【问题讨论】:
-
您能否提供示例输入以及两种实现中的不同输出?
-
尝试使用 Base64 对加密输出进行编码,然后在 Java 中对其进行解码
标签: javascript java encryption xor