周末写了一个非常简单的解密函数:将参数 x 乘以一个常数,然后高低位置换,重复 n 次。
代码:
#include <cstdint>
#include <iostream>
uint64_t solve(uint64_t x, uint64_t n) {
while (n--) {
x *= 0xD1342543DE82EF95;
x ^= x >> 32;
}
return x;
}
int main() {
uint64_t result = solve(11451419260817, 1e14);
std::cout << "x" << result % 100000 << "\n";
return 0;
}
结果是支付宝口令红包,最先破解者奖赏一杯咖啡☕️。(明天 11 点过期)
⚠️ 上述代码大约需运行一天时间( 5GHz ),暴力运算大概率会超时,因此需要一些数学技巧来优化。如果能找到优化方案,我再发一个新的测试~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.