RSA 求公共(public)指数的倒数

标签 rsa

我对 RSA key 生成及其使用有一个非常基本的疑问。

在 RSA key 生成中,您选择两个阶数非常大的素数。然后将它们相乘。(eq p * q = N ) 现在,Euler(N)=(p-1)(q-1) 。现在你找到一个号码0 < e < Euler(N)使得 e 和 Euler(N) 互质。 {e.Euler(N)}成为您的公钥。现在您计算 d(私钥),使得 e * d =1 (mod(Euler(N))) .
现在假设您使用公钥加密某些内容 - c=m^e(mod(N)). 现在,在使用私钥(d)解密时,您可以执行 c^d(mod(N)) .
现在我怀疑你是否在 mod(Euler(N)) 中找到了 e 的逆,但是当你解密时,你是在 mod(N) 中进行的。这怎么可能?

最佳答案

参见维基百科herehere 。基本上,您想要解密来“撤消”加密。由于对于某个整数 k,e⋅d = 1 mod φ(N) 等价于 e⋅d = 1 + k⋅φ(N),因此您有:

cd mod N = (me)d mod N = m(e⋅d) mod N = m(1 + k⋅φ(N)) = (m1) ⋅ (mφ(N))k 模 N

应用您在代数中学到的以下规则:

1) axy = (ax)y = (ay)x
2) ax+y = ax ⋅ ay

要完成此操作并简化 (m1) ⋅ (mφ(N))k mod N,请记住 aφ(N) = 1 mod N,所以

(mφ(N))k mod N = 1k = 1 mod N。

关于RSA 求公共(public)指数的倒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10038823/

相关文章:

c# - RSA:在 javascript 中加密密码但无法在 C# 中解密

c# - 对于使用 BouncyCaSTLe 的 RSA 密码,输入太大

c# - 尝试导出 X509 私钥的 RSAParameters 时出现 CryptographicException "Key not valid for use in specified state."

java - RSA加密-AES key 解密并存储在文件中

c# - 加密/解密大文件 (.NET)

java - 从其他客户端解密 RSA 时发生 BadPaddingException

ios - 无法调用 Unmanaged<AnyObject> 的初始值设定项?快速无参数

c# - 如何在 C# 中填写 RSAParameters 值

java - 私钥分发技术?

C# 从 RSA PEM 私钥中提取公钥