无混淆字符串函数

unobfuscating string function

本文关键字:函数 字符串      更新时间:2023-10-16

假设我有一个字符串:"

String input = "5;5;5;5;"

并插入到这个函数中:

for(int i=input.length()-1; i>=0; i--){
    output += (QChar)((input[i].unicode() + 32) + 8160);
}
return output;

输出:※‵※‵※‵※‵

我怎么写一个解密函数?

我知道我可以这样做:

for(int i=input.length()-1; i>=0; i--){
     output += (QChar)(input.unicode()-32 - 8160);
}
return output;

但是为什么会这样呢:

for(int i=input.length()-1; i>=0; i--){
     output += (QChar)((input.unicode()-32)%255); //Get ASCII character
}
return output;

这只是巧合吗?还是我不懂数学。我知道,试图反转模数操作几乎是不可能的,除非你知道你想要的x的范围。

(1 + x) % 4 = 2

x可以是5,9,13,…

第二个解密函数有效,因为8160恰好是255的倍数,并且原始值包含在0-254范围内。

看看你的例子,x可以是任何n1+4n形式的任何数字。同样,对于第二个解密函数,input.unicode()-32+255*n % 255对于n的任何小值都具有相同的值。只要在计算过程中没有溢出),包括n=-32,它对应于255*(-32)=-8160