【发布时间】:2014-02-21 01:17:22
【问题描述】:
我遇到的问题是 x = (16807 x k) % 65536
即 16807k ≡ x (mod 65536)
我需要在知道 x 的情况下计算 k。 到目前为止,我的最大努力是蛮力。有计算k的数学方法吗? 如果不是对我当前的代码进行任何优化,我们将不胜感激。
t = x;
while ( t += 15115 ) // 16807k = 65536n + x - this is the n
{
if (t%16807 == 0)
return t/16807;
}
return x;
编辑:将 += 更改为 15115
【问题讨论】:
-
x = (16807 x k) % 65536 和 16807k = x mod 65536 不等价。
-
@Roecrew 评论的补充:第一个方程有多个
k作为答案,第二个方程有一个k。你需要找到所有k的吗? -
老兄对不起,你没有任何意义。你能至少告诉我们这段代码的应用是什么吗?
-
抱歉,忽略第二个等式 - 它应该是 16807k ≡ x (mod 65536)。它来自加密功能。应用的函数 ((16807 x k) % 65536) ^ plaintext for 16bit k and plaintext 是两个字符。我有明文的前几个字节,并试图尽可能有效地解密它。明文^密文给了我上面我所说的x
-
* 用于大学作业。他们希望我们暴力破解它。因此我需要提供原始密钥以及明文
标签: c math optimization hash modulus