Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单地用Javascript进行XOR加密,用Java进行解密_Javascript_Java_Encryption_Xor - Fatal编程技术网

简单地用Javascript进行XOR加密,用Java进行解密

简单地用Javascript进行XOR加密,用Java进行解密,javascript,java,encryption,xor,Javascript,Java,Encryption,Xor,这样做的目的与安全性无关,而且密钥很长,所以我只想对字符串使用简单的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++)

这样做的目的与安全性无关,而且密钥很长,所以我只想对字符串使用简单的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);
}
函数dc\u加密(str,key)
{
var ord=[];var res=“”;
var i;

对于(i=1;i当XOR编码两个字符串时,单个字符的结果XOR值有时不会产生可显示的字符。 因此,一种解决方案是将结果编码为十六进制值序列,然后在服务器端对这些十六进制值进行解码

Javascript:

function encryptStringWithXORtoHex(input,key) {
    var c = '';
    while (key.length < input.length) {
         key += key;
    }
    for(var i=0; i<input.length; i++) {
        var value1 = input[i].charCodeAt(0);
        var value2 = key[i].charCodeAt(0);

        var xorValue = value1 ^ value2;

        var xorValueAsHexString = xorValue.toString("16");

        if (xorValueAsHexString.length < 2) {
            xorValueAsHexString = "0" + xorValueAsHexString;
        }

        c += xorValueAsHexString;
    }
    return c;
}
private static String decryptStringWithXORFromHex(String input,String key) {
    StringBuilder c = new StringBuilder();
    while (key.length() < input.length()/2) {
        key += key;
    }

    for (int i=0;i<input.length();i+=2) {
        String hexValueString = input.substring(i, i+2);
        int value1 = Integer.parseInt(hexValueString, 16);
        int value2 = key.charAt(i/2);

        int xorValue = value1 ^ value2;

        c.append(Character.toString((char) xorValue));

    }
    return c.toString();
};
函数encryptStringWithXORtoHex(输入,键){
var c=“”;
while(key.length对于(var i=0;iCan)您能否提供示例输入以及两种实现中的不同输出?请尝试使用Base64对加密输出进行编码,然后用Java对其进行解码
private static String decryptStringWithXORFromHex(String input,String key) {
    StringBuilder c = new StringBuilder();
    while (key.length() < input.length()/2) {
        key += key;
    }

    for (int i=0;i<input.length();i+=2) {
        String hexValueString = input.substring(i, i+2);
        int value1 = Integer.parseInt(hexValueString, 16);
        int value2 = key.charAt(i/2);

        int xorValue = value1 ^ value2;

        c.append(Character.toString((char) xorValue));

    }
    return c.toString();
};