Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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
Node.js 无法解密xor-base64文本_Node.js_Go_Utf 8_Base64 - Fatal编程技术网

Node.js 无法解密xor-base64文本

Node.js 无法解密xor-base64文本,node.js,go,utf-8,base64,Node.js,Go,Utf 8,Base64,我使用下面的代码来加密和解密数据。现在我想对节点JS的数据进行加密,并对Go-lang的数据进行解密,但我无法使用Go-lang实现 var B64XorCipher = { encode: function(key, data) { return new Buffer(xorStrings(key, data),'utf8').toString('base64'); }, decode: function(key, data) { data = new Buffer

我使用下面的代码来加密和解密数据。现在我想对节点JS的数据进行加密,并对Go-lang的数据进行解密,但我无法使用Go-lang实现

var B64XorCipher = {
  encode: function(key, data) {
    return new Buffer(xorStrings(key, data),'utf8').toString('base64');
  },
  decode: function(key, data) {
    data = new Buffer(data,'base64').toString('utf8');
    return xorStrings(key, data);
  }
};

function xorStrings(key,input){
  var output='';
  for(var i=0;i<input.length;i++){
    var c = input.charCodeAt(i);
    var k = key.charCodeAt(i%key.length);
    output += String.fromCharCode(c ^ k);
  }
  return output;
}
有人能帮我解决吗

该方法返回一个介于0和65535之间的整数 表示给定索引处的UTF-16代码单元

var c = input.charCodeAt(i);

对于字符串值,“range”子句迭代Unicode代码 从字节索引0开始的字符串中的点。连续 在迭代中,索引值将是 字符串中连续的UTF-8编码代码点,第二个 rune类型的值将是相应代码的值 指向如果迭代遇到无效的UTF-8序列,则 第二个值将是0xFFFD,Unicode替换字符,以及 下一次迭代将推进字符串中的一个字节


UTF-16和UTF-8

该方法返回一个介于0和65535之间的整数 表示给定索引处的UTF-16代码单元

var c = input.charCodeAt(i);

对于字符串值,“range”子句迭代Unicode代码 从字节索引0开始的字符串中的点。连续 在迭代中,索引值将是 字符串中连续的UTF-8编码代码点,第二个 rune类型的值将是相应代码的值 指向如果迭代遇到无效的UTF-8序列,则 第二个值将是0xFFFD,Unicode替换字符,以及 下一次迭代将推进字符串中的一个字节



UTF-16与UTF-8?

您应该使用
解码运行安装
,而不仅仅是
切片
字符串到字节

游乐场解决方案:

输出是

slice of string...
The byte at 4 is |�|, |我| is 3 bytes long.
runes of string...
The character code at 4 is|我|25105| 

您应该使用
decoderuneinnstring
,而不仅仅是
slice
字符串到字节

游乐场解决方案:

输出是

slice of string...
The byte at 4 is |�|, |我| is 3 bytes long.
runes of string...
The character code at 4 is|我|25105| 

对于大多数(如果不是全部的话)加密,您应该对单字节进行操作,而不是像utf-8中那样对多字节字符进行操作。在Go中,这意味着始终坚持字节片,仅转换为字符串以打印文本。我不太熟悉JavaScript,但我相信缓冲区有一种“二进制”编码,它不会导致数据以任何特定的编码进行解释。我只想问:你知道xor很容易被破坏,是吗?对于大多数(如果不是所有)加密的东西,你应该在单字节上操作,例如,不是utf-8中出现的多字节字符。在Go中,这意味着始终坚持字节片,仅转换为字符串以打印文本。我不太熟悉JavaScript,但我相信缓冲区有一种“二进制”编码,它不会导致数据以任何特定的编码进行解释。我只想问:你知道xor很容易被破坏,是吗?你能给我举一些例子来试一下我上面的用例吗?你能给我举一些例子来试一下我上面的用例吗
function xorStrings(key,input){
  var output='';
  for(var i=0;i<input.length;i++){
    var c = input.charCodeAt(i);
    var k = key.charCodeAt(i%key.length);
    output += String.fromCharCode(c ^ k);
  }
  return output;
}

console.log(xorStrings('1234fd23434',"The 我characterode我 113 is equal to q"))
// expect: "eZV扷ZRFRWEWA[戣[@GRX@^B"
package main

import (
    "fmt"
    "unicode/utf8"
)

var sentence = "The 我quick brown fox jumps over the lazy dog."

var index = 4

func main() {
    fmt.Println("slice of string...")
    fmt.Printf("The byte at %d is |%s|, |%s| is 3 bytes long.\n",index,sentence[index:index+1],sentence[index:index+3])

    fmt.Println("runes of string...")
    ru, _ := utf8.DecodeRuneInString(sentence[index:])
    i := int(ru)
    fmt.Printf("The character code at %d is|%s|%d|    \n",index, string(ru), i)
}
slice of string...
The byte at 4 is |�|, |我| is 3 bytes long.
runes of string...
The character code at 4 is|我|25105|