我正在读一本关于密码学的书(我试过将这些术语从西班牙语翻译成英语),我不明白如何计算这个领域内的逆(原来这个问题用过了术语“body”而不是“field”,因为这是来自西班牙语或德语等语言的字面翻译。
通过纯抽取加密单字母结构:
·加密:Ci = a * Mi mod n 例如 - >我们将加密字母C(C是位置2,从0开始),a = 20,西班牙语alfhabet(n = 27) - > Ci = 20 * C mod 27 = 20 * 2 mod 27 = 13 => Ñ
·解密:a ^( - 1)* Ci mod n
这是问题
a ^( - 1)是体n中抽取因子的倒数;换句话说:逆(a,n)。我用Google搜索并尝试进行一些计算,但我没有得到正确的结果---> inverse(a,n)= inverse(20,27)= 16(并且gcd有效)。
例如:
22 ^( - 1)* 13 mod 27!= 16
答案 0 :(得分:1)
要在示例中找到模块化(乘法)逆,您必须找到x
(22 * x) % 27 == 1
。
你可以用数学方法做variety of different ways。请注意,通常情况下,仅当gcd(a, n) == 1
时才存在逆。
如果您想为您的示例编写一个简单的算法,请尝试以下Python代码:
def inverse(a, n):
for x in range(n):
if (a * x) % n == 1:
return x
这给出了:
>>> inverse(22, 27)
16
>>> inverse(20, 27)
23
正如您的问题下面的评论中所提到的,在您喜欢的编程语言的现有库中计算模块化逆转可能有更好的功能。