c# - 反转已溢出的乘法运算

标签 c# security math overflow reverse

给定代码:

uint Function(uint value)
{
  return value * 0x123456D;
}

输入值 0x300 会产生结果 0x69D04700。这只是结果的低 32 位。 给定结果 0x69D04700 和因子 0x123456D,是否可以快速检索满足 (value * 0x123456D) & 0xFFFFFFFF = 0x69D04700 的所有数字?

编辑:我显示的代码是伪代码 - 我无法扩大返回类型。

最佳答案

你需要的是模除法,它可以用欧几里德算法的一个版本来计算。在本例中,结果为 768。

这非常快 -- time (log n)2 即使对于一个简单的实现也是如此。 (如果您需要处理大量数据,我可以提供更好算法的引用。)

参见 extended Euclidean algorithm有关如何实现这一点的草图。

关于c# - 反转已溢出的乘法运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944910/

相关文章:

c# - 为什么此 C# 类库项目无法创建 COM 兼容 DLL?

c# - 检索系统驱动器的最安全方法是什么

C# string[] arrayA 在 arrayA[3] 中返回空值

c# - ResourceManager 没有选择正确的 resx 文件

ruby-on-rails - 应用服务器和数据库服务器之间的安全问题

c# - 是否有已知的算法来查找 N 个元素中哪 K 个元素的总和最接近整数?

Python2 math.fsum 不准确?

java - 在 HTTP 连接中使用基于 token 的身份验证时如何防止重放攻击

java - 我应该使用 cacerts 还是本地 trustore 但不能同时使用两者?

javascript - 使用 BigInt 进行数学计算时的精度问题