在RSA加密体制中, 已知素数 p = 7, q = 11, 公钥 e = 13, 试计算私钥 d 并给出对明文 m = 5 的加密,求其密文. 已知密文 c = 15, 求其明文
解答过程如下:
n=pq=77
φ(n)=(p-1)(q-1)=60
ed≡1 mod φ(n)
即13d mod 60 = 1
解得:d = 37
公钥(n,e)=(77,13)
密文c = m^e mod n = 5^13 mod 77 = 26
私钥(n,d)=(77,37)
明文m = c^d mod n = 15^37 mod 77 = 71
计算起来很简单,但是模运算太麻烦了。所以我做了一个小工具,专门用来求这种题目
'ed≡1 mod φ(n)'
# 计算公钥,私钥
p=int(input("请输入P:"))
q=int(input("请输入Q:"))
n=p*q
rn=(p-1)*(q-1)
e=int(input("请输入e:"))
print("公钥:",f"({n},{e})")
#获取私钥
def check():
array=[]
for i in range(1,1000):
if((e*i)%rn==1):
if(type(i)==int):
array.append(i)
return array[0]
print("d:",check())
print("私钥:",f"({n},{check()})")
# 根据明文求秘文
def ming():
m=int(input("请输入明文"))
c=(m**e)%n
print("秘文是:",c)
# 根据秘文求明文
def mi():
print ("-------------------------------------------------------------------------")
m = int (input ("请输入密文"))
r=check()
c = (m ** r) % n
print ("明文是:", c)
ming()
代码运行结果: