RSA原理及Python实现

本文介绍了RSA公钥加密算法的基本原理,包括选取大素数、计算欧拉函数、确定公钥和私钥的过程。文章还展示了如何使用Python实现RSA算法,包括核心的素数生成、扩展欧几里得算法求私钥以及快速幂运算。通过实例验证了算法的正确性,并提供了详细代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

RSA是第一个安全,实用的公钥加密算法,已成为国家标准,是目前应用广泛的公钥加密体制,RSA的基础是数论的欧拉定理 ,它的安全性依赖于大整数因子分解的困难性,因为加解密次序可换,可用于加解密,可用于设计数字签名体制。

算法流程

  1. 选取两个安全的大素数p和q(其长度要足够长至少要是1024位)
  2. 计算乘积n = p * q, 计算phi(n) = (p-1)*(q-1),其中phi(n)为n的欧拉函数
  3. 随机选取整数e,作为公钥,要求满足gcd(e, phi(n)) =1 ,即e与phi(n)互素
  4. 用扩展欧几里得算法计算私钥d。满足d * e=1(mod phi(n)),e和n是公钥,d是秘钥。

我的代码是固定了公钥为65537,产生的两个大素数是通过Miller-Rabin算法进行塑素性检测并且产生素数p还有q。

核心代码及分析

首先是先产生两个大素数p和q,这里的核心代码是下面的代码,这里是根据消息的长度去产生p和q,怎么知道这两大数是个素数呢?就得通过Miller-Rabin概率素数测试算法,先判断一次费马小定理,满足的话就有可能是一个素数,然后再经过5次的Miller-Rabin素性测试,这样就可以很大概率说明其是素数,两次调用这样的过程就可以产生p和q。

#辗转相除法求最大公因数
def gcd(a, b):
    if a > b: a, b = b, a
    while b != 0:
        a, b = b, a%b
    return a

def isPrime(n):
    """
    判断一个数是否为素数
    厄拉托塞师除法 
    """
    if n <= 1:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i== 0:
            
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值