在有限域内反演

时间:2014-08-14 10:31:56

标签: math cryptography

我正在读一本关于密码学的书(我试过将这些术语从西班牙语翻译成英语),我不明白如何计算这个领域内的(原来这个问题用过了术语“body”而不是“field”,因为这是来自西班牙语或德语等语言的字面翻译。

通过纯抽取加密单字母结构:

  • 等价性:
  • Ci:加密信件
  • a:抽取常数
  • Mi:消息未加密
  • mod:模块操作(我们获得余数)
  • n:加密字母表中的字母数
  • 西班牙字母:ABCDEFGHIJKLMNÑOPQRSTUVWZXY

·加密: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

1 个答案:

答案 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

正如您的问题下面的评论中所提到的,在您喜欢的编程语言的现有库中计算模块化逆转可能有更好的功能。