信息安全密码学-----Python密码解释器

在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()

代码运行结果: 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值