使用Python编写RSA

源码如下:

class MyRSA():
    def get_d(self, e, φ):
        i=0
        while True:
            if (e*i)%φ == 1:
                return i
            else:
                i+=1

    def get_e(self, φ):
        e_set = ()
        for i in range(1,φ):
            if self.isPrime(φ,i):
                e_set += (i,)
        return e_set

    def isPrime(self, a, b):
        if(a < b):
            tmp = a
            a = b
            b = tmp
        c = a % b
        while c != 0:
            a = b
            b = c
            c = a % b
        if (b == 1):
            return True
        else:
            return False

    def get_miyue(self):
        print('现在开始生成密钥')
        p = int(input('请输入p:'))
        q = int(input('请输入q:'))
        n = p * q
        φ = (p - 1) * (q - 1)
        print('有如下可选的e:', self.get_e(φ))
        e = int(input('选择一个e:'))
        d = self.get_d(e, φ)
        print('这是最小的d:', d)
        self.password = (d, n)
        return (n, e, d)

    def jiami(self, x):
        n, e, d = self.get_miyue()
        return pow(x, e, n)

    def jiemi(self, y):
        d, n = self.password
        return pow(y, d, n)

    def rsaMain(self):
        x = int(input('请输入明文:'))
        print('现在进行加密操作')
        y = self.jiami(x)
        print('明文加密的结果是:',y)
        print('现在进行解密操作')
        print('密文解密的结果是:',self.jiemi(y))


if __name__ == '__main__':
    MyRSA().rsaMain()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值