如何找到MOD表达式中的变量值?

发布于 2024-08-12 23:51:44 字数 88 浏览 10 评论 0原文

9 = 2^X mod 11

X 是什么以及如何找到 X?

它与在 RSA 算法中查找纯文本有关,我正在为其编写一个 C 程序。

9 = 2^X mod 11

What is X and how do you find X?

Its related to finding the plain text in RSA algorithm and I'm writing a C program for it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

雨落□心尘 2024-08-19 23:51:44

对于任意整数 i,答案是 6 + 10i。

获得小模数解的一个简单方法是迭代 x 的所有值。您只需检查 0 到 10 (= 11 - 1) 之间即可找到第一个解(如果存在解)。

x = 0
while x < 50:
    if 9 == 2**x % 11:
         print x
    x += 1

输出:

6
16
26
36
46

显然,如果模量很大,这将需要很长时间。

更多信息请参见离散对数页面。笔记:

没有有效的经典算法
计算一般离散对数
logbg 是已知的。朴素的算法是
将 b 提高到越来越高的幂
k 直到找到所需的 g;这
有时称为审判
乘法。这个算法
需要线性的运行时间
组 G 的大小,因此
中位数的指数
组的大小。

如果模幂求逆很容易,那么它就不是一个好的密码原语。

The answer is 6 + 10i for any integer i.

A simple way to get solutions for small moduli is to iterate over all values of x. You only need to check between 0 and 10 (= 11 - 1) to find the first solution, if any solution exists.

x = 0
while x < 50:
    if 9 == 2**x % 11:
         print x
    x += 1

Output:

6
16
26
36
46

Obviously this will take a long time if the modulus is large.

More information is on the Discrete Logarithm page. Note:

No efficient classical algorithm for
computing general discrete logarithms
logbg is known. The naive algorithm is
to raise b to higher and higher powers
k until the desired g is found; this
is sometimes called trial
multiplication. This algorithm
requires running time linear in the
size of the group G and thus
exponential in the number of digits in
the size of the group.

If it were easy to invert modular exponetiation, it wouldn't be a good cryptographic primitive.

时光磨忆 2024-08-19 23:51:44

显然,2^n mod 11 的序列将是循环的。

2^0 模 11 = 1
2^1 模 11 = 2
2^2 模 11 = 4
2^3 模 11 = 8
2^4 模 11 = 5
2^5 模 11 = 10
2^6 mod 11 = 9
2^7 模 11 = 7
2^8 模 11 = 3
2^9 模 11 = 6
2^10 模 11 = 1
2^11 mod 11 = 2

因此,循环长度为 10。

2^n mod 11 = 9 对于 n=6+10*m,其中 m 是整数

Obviously, sequence of 2^n mod 11 will be cyclical.

2^0 mod 11 = 1
2^1 mod 11 = 2
2^2 mod 11 = 4
2^3 mod 11 = 8
2^4 mod 11 = 5
2^5 mod 11 = 10
2^6 mod 11 = 9
2^7 mod 11 = 7
2^8 mod 11 = 3
2^9 mod 11 = 6
2^10 mod 11 = 1
2^11 mod 11 = 2

So, cycle length is 10.

2^n mod 11 = 9 for n=6+10*m where m is integer

流心雨 2024-08-19 23:51:44

我认为可以使用模块化算术来解决。另一种方法是在 F11 (Z/11Z) 中计算 9=2^X,但这也是模算术的一部分。

另一种解决方案(您只能找到一个解决方案)是以数值方式求解方程,这在 C 程序中可能更容易。

I think that can be solved using modular arithmetic. Another way is calculating 9=2^X in F11 (Z/11Z), but that's part of modular arithmetic, too.

Another solution (where you'll find only ONE solution) is to solve the equation numerically, that's probably easier in a C program.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文