【问题标题】:unobfuscating string function非混淆字符串函数
【发布时间】:2014-08-02 21:33:29
【问题描述】:

假设我有一串字符:"

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,...

【问题讨论】:

    标签: c++ qt modulus


    【解决方案1】:

    第二个解密函数起作用是因为8160恰好是255的倍数,而原始值包含在0-254范围内。

    查看您的示例x 可以是任何1+4n 形式的任何数字n。类似地,对于第二个解密函数,input.unicode()-32+255*n % 255 对于n 的任何小值(即只要在计算期间没有溢出)具有相同的值,包括对应于255*(-32)=-8160 的情况n=-32

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2011-03-14
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多