如何反转Javascript XOR和按位运算符

如何反转Javascript XOR和按位运算符,javascript,xor,Javascript,Xor,我在JS中有以下代码: 功能测试(e){ 对于(var t=”,n=e.charCodeAt(0),i=1;i4&s\x11-&;7+?)); //就像我在介绍中说的,你可以用 //任何字符,但这将生成不同的加密 //绳子。 const encrypted2=加密(“!”,字符串); console.log(加密2); const decrypted2=解密(encrypted2); console.log(解密2) t += String.fromCharCode(e.charCodeAt(

我在JS中有以下代码:

功能测试(e){
对于(var t=”,n=e.charCodeAt(0),i=1;iconsole.log(test('@\f+6*5(.=j\x02“9+=>4&s\x11-&;7+?));
按位操作不能反转:

0 & 1 = 0; 
0 & 0 = 0;

您的代码使用第一个字符代码对其他字符代码进行异或运算。因此,您不能简单地将其反转,因为它需要2个输入。不仅是内容字符串,还包括用于异或运算的字符。您不能猜测这是
@
,因为所有字符都有效,但会产生不同的加密Sting

XOR是其自身的反面,类似于与
-1
相乘是其自身的反面。这意味着您可以重复使用单个函数进行加密和解密。只需在前面添加密钥字符进行加密,然后将其删除进行解密

这不是代码高尔夫,所以我选择了一些更合理的名称(主要是
e
t
n
容易混淆)。在我看来,好的变量名称有助于读者更好地理解代码

函数切换加密(keyChar,string){
常量keyCode=keyChar.charCodeAt(0);
让结果=”;
for(让index=0;index4&s\x11-&;7+?));
//就像我在介绍中说的,你可以用
//任何字符,但这将生成不同的加密
//绳子。
const encrypted2=加密(“!”,字符串);
console.log(加密2);
const decrypted2=解密(encrypted2);
console.log(解密2)
t += String.fromCharCode(e.charCodeAt(i) ^ i - n & 127);
                                             ^
0 & 1 = 0; 
0 & 0 = 0;