Math 有限域内的逆

Math 有限域内的逆,math,cryptography,Math,Cryptography,我正在读一本关于密码学的书(我试着将术语从西班牙语翻译成英语),但我不明白如何在这个字段中计算逆(最初的问题使用术语“body”而不是“field”,因为这是西班牙语或德语等语言的直译) 通过纯抽取使用单字母替换进行加密: 等价物: Ci:加密的信件 a:抽取常数 Mi:没有加密的消息 mod:模块操作(我们获得剩余部分) n:加密字母表中的字母数 西班牙语字母表:ABCDEFGHIJKLMNñopqrstuvzxy ·加密:Ci=a*Mi mod n 例如-->我们将用a=20和西班牙语a

我正在读一本关于密码学的书(我试着将术语从西班牙语翻译成英语),但我不明白如何在这个字段中计算逆(最初的问题使用术语“body”而不是“field”,因为这是西班牙语或德语等语言的直译)

通过纯抽取使用单字母替换进行加密:

  • 等价物:
  • Ci:加密的信件
  • a:抽取常数
  • Mi:没有加密的消息
  • mod:模块操作(我们获得剩余部分)
  • n:加密字母表中的字母数
  • 西班牙语字母表:ABCDEFGHIJKLMNñopqrstuvzxy
·加密:Ci=a*Mi mod n 例如-->我们将用a=20和西班牙语alphabet(n=27)对字母C(C是位置2,从0开始)进行加密-->Ci=20*C mod 27=20*2 mod 27=13=>n

·解密:a^(-1)*Ci mod n

问题出在这里

a^(-1)是主体n中抽取因子的倒数;换句话说:逆(a,n)。我在谷歌上搜索并尝试进行一些计算,但我没有得到正确的结果--->逆(a,n)=逆(20,27)=16(gcd是有效的)

例如:

22^(-1)*13模块2716

要在示例中找到模(乘法)逆,必须找到
x
,这样
(22*x)%27==1

有一种方法,你可以从数学上做到这一点。请注意,一般情况下,只有当
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

正如您的问题下面的评论中所提到的,在您最喜欢的编程语言的现有库中,很可能有更好的函数用于计算模逆。

它是22,27,但OK:D.完美。但我不明白为什么我用Python时,C#。。。“(22^(-1))%27”结果不是16,但在Wolfram Alpha中是:^%28-1%29+mod+27一些想法?使用^会导致问题。在那些编程语言中,它意味着其他的东西,Wolfram Alpha可以用第三种方式解释^-1。在素数顺序字段中反转最简单的方法(如果没有专门的函数)是计算
x^(p-2)mod p
。在C#中,您将使用
biginger.ModPow(x,p-2,p)
虽然存在顺序为3^3=27的字段,但它们不是使用模运算实现的。所以你所从事的只是一个圈子而不是一个领域。还要注意的是,只有GCD(x,模数)=1的元素才会有一个逆矩阵。e、 没有3模27的倒数。太好了!但是一个疑问:为什么在密码学中,乘法的倒数是“(a*x)mod n==1”,而除法是否定的?没问题!为了回答你的问题,乘法和除法本质上是相同的运算:当你找到一个数的乘法逆
a
时,你所做的就是找到另一个数
x
,这样
a*x==1
。例如,如果
a=2
,我们通常建议
x=1/2
作为反比。然而,我们不能在模运算中选择非整数。在您的示例中,我们仅限于从整数0、1、2、…、25、26中查找x的逆。相反,我们可以选择
x=14
,因为
2*14=28=1 mod 27
,所以在这种情况下14是2的乘法逆。*对不起,应该是这样的:我们只能从整数0,1,2,…,25,26中寻找
a的逆。