密码学实验_9_RSA加密算法(python 实现)

效果

代码

from encryption_algorithm import Primitive_root, Euclid
import random
import math

def is_primer(n: int)-> bool:
    return False if 0 in [n % i for i in range(2, int(math.sqrt(n))+1)] else True

def get_randint_primer(high: int, low=0)-> int:
    R = random.randint(low, high)
    while(is_primer(R)==False):
        R = random.randint(low, high)
    return R

def get_e(E_n):
    euc = Euclid.euclid()
    e = get_randint_primer(low=1, high=E_n)
    while(euc.gcd(E_n,e)!=1):
        e = get_randint_primer(low=1, high=E_n)
    return e

def get_d(E_n,e):
    d = 1
    while(e*d%E_n!=1):
        d += 1
    return d

def encrypt(e,n,m):
    return m**e%n

def decrypt(d,n,c):
    return c**d%n

if __name__=='__main__':
    p = get_randint_primer(low=200, high=400)
    q = get_randint_primer(low=400, high=600)
    n = p * q
    E_n = Primitive_root.Euler(n)
    e = get_e(E_n)
    d = get_d(E_n,e)
    m = 11
    c = encrypt(e,n,m)
    m_ = decrypt(d,n,c)
    print('初始明文:%s'%(m))
    print('加密密文:%s'%(c))
    print('解密明文:%s'%(m_))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值