Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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中重建XORed UTF-8编码文本,客户端,无节点_Javascript_Python_Encoding_Utf 8_Client Side - Fatal编程技术网

在javascript中重建XORed UTF-8编码文本,客户端,无节点

在javascript中重建XORed UTF-8编码文本,客户端,无节点,javascript,python,encoding,utf-8,client-side,Javascript,Python,Encoding,Utf 8,Client Side,我正在努力用JavaScript实现这一点。 首先我将描述这个场景,然后我将把我的代码,Python版本,我似乎无法翻译成JavaScript 我有一个在服务器上运行的网页。我无法访问它,所以实现基本功能的唯一方法就是使用JavaScript。 该网页用于比较信息。信息以CSV格式存储,我使用它通过AJAX调用动态创建HTML表。为了不让用户快速获得这些信息,让他们能够打印源代码并“窃取”,我遇到了一系列解决方案,比如Base64编码(我知道这被认为是“模糊安全”,这是一种糟糕的做法,但我在这里

我正在努力用JavaScript实现这一点。 首先我将描述这个场景,然后我将把我的代码,Python版本,我似乎无法翻译成JavaScript

我有一个在服务器上运行的网页。我无法访问它,所以实现基本功能的唯一方法就是使用JavaScript。 该网页用于比较信息。信息以CSV格式存储,我使用它通过AJAX调用动态创建HTML表。为了不让用户快速获得这些信息,让他们能够打印源代码并“窃取”,我遇到了一系列解决方案,比如Base64编码(我知道这被认为是“模糊安全”,这是一种糟糕的做法,但我在这里别无选择)

Base64在本例中很容易使用,但我丢失了UTF-8中的所有特殊字符(如áéíóúñ等),它们是我语言(西班牙语)的一部分

因此,这里有一个首选的解决方案,它在Python中很有魅力:使用按位异或。使用此方法我可以实现什么:

  • 如果有人知道CSV文件的url,如果没有基本的编程知识对其进行反编码,阅读文本就不会那么容易
  • 我可以很容易地对源数据库进行编程,以导出数据,然后运行XORing功能,将这些文件上传到服务器,然后动态对其进行反编码
就是在最后一步,我无法实现我想要的

以下是我的Python脚本: 编码:

b = bytearray(open('file.csv', 'rb').read())

for i in range(len(b)):
    b[i] ^= 0x71

open('file.out', 'wb').write(b)
要解码:

b = bytearray(open('file.out', 'rb').read())
for i in range(len(b)):
    b[i] ^= 0x71
我需要在JS中实现那个小的解码功能。 提前感谢大家抽出时间

Base64 base64使您丢失像ñorá这样的非ASCII字符不是真的。为什么要这样做?Base64可以对任何二进制数据进行编码,而编码的文本只不过是二进制数据

因此编码包括两个步骤: 文本编码(如UTF-8)将文本转换为字节,base64编码将其转换为ASCII字符串。 解码的工作原理相同,但向后(两个相应解码函数的顺序相反)

以下是UTF-8的文本编码在JavaScript中的工作方式:

function encode_utf8(s) {
  return unescape(encodeURIComponent(s));
}

function decode_utf8(s) {
  return decodeURIComponent(escape(s));
}
这是我从你那里得到的。请注意,我根本不是一个JS破解高手,现在我找不到更方便的方法了

让我们试试这个:

s = 'Se bañó todo el día.';
b = encode_utf8(s);  # text encoding
a = btoa(b);         # base64 encoding
console.log(a);      # prints U2UgYmHDscOzIHRvZG8gZWwgZMOtYS4=

d = decode_utf8(atob(a));  # decode base64, then UTF-8
console.log(d);      # prints Se bañó todo el día.
这里没有丢失任何字符

异或法 如果仍要执行XOR操作,可以按如下方式进行解码:

  • 使用
    array.from()
  • 使用
    ^
    运算符进行异或解码(或
    ^=
    赋值)
  • 使用
    string.fromCodePoint()
  • 使用
    decode\u utf8()对字符串进行解码
不过,我并没有为此提供代码。 尤其是第三步可能会有点麻烦,我不确定是否值得这么做。 毕竟,用户只需检查JS代码就可以了解数据是如何“加密”的,无论是base64还是XOR方法


如果您来自Python背景,请注意Python的
str
bytes
类型没有区别。
{en,de}code_utf8()
函数的输入和输出总是相同类型的字符串。当您编码一个字符串时,您只需返回另一个字符串,其中每个代码点都低于256,并且可能比输入字符串长。

非常感谢您的时间和解释。我将编辑我的原始帖子,添加我对Base64和字符编码的经验(Python和Javascript之间的差异)。再次感谢!