我将在下周接受测试,并且我正在运行一些带素数的基本示例。书中的例子似乎没有遇到这个问题
第一步 - 选择两个素数(我选择了p = 3,q = 7)
第二步 - 计算n = pq = 21
第三步 - 计算总数(n)= tot(p)* tot(q)= 2 * 6 = 12
第四步 - 选择e使得1< e< tot(n)使得gcd(e,tot(n))= 1(互质)。我选择了e = 5.
第五步 - 选择d使得d * e%tot(n)= 1。
根据我的理解,d必须是整数。这是错误的结论吗?或者5对于这种情况不是有效的e?
答案 0 :(得分:1)
是的,它必须是整数。第五步寻找的是modular multiplicative inverse。基本上,d
是一个整数,d*e = m*tot(n) + 1
对于某个整数m
,换句话说,d*e
是tot(n)
的倍数的一倍。只要e
和tot(n)
是互质的,e
就会有反转 - 就您的示例而言,d
恰好是5:d*e = 5*5 = 25 = 2*tot(n) + 1
。
答案 1 :(得分:1)
是的, d 是一个整数,按 e 的模数倒数计算。这是一个计算数 x 的倒数的函数,关于模数 m :
function inverse(x, m)
a, b, u := 0, m, 1
while x > 0
q := b // m
x, a, b, u := b % x, u, x, a - q * u
if b == 1 return a % m
error "must be coprime"
如果您想了解更多信息,我会在my blog处进行RSA计算示例。