python实现RSA加密详细

一、原理

采用数学函数来进行变换,密文产生的结果远比普通代换多,用公钥进行加密,私钥进行解密。

二、基本步骤
  1. 选取素数p、q

    Miller-Rabin素性检验

  2. 计算 n = p * q φ(n) =(p-1)(q-1)

  3. 选择整数e (公钥) 满足1<e< φ(n)(有乘法逆元) 且e与 φ(n) 互素(有唯一乘法逆元)

  4. 计算 d*e mod q =1 的d 由于计算机表达整数的长度有限,需要用快速幂算法计算

    扩展欧几里得求逆元

  5. 以{e,n}为公钥 {d,n}为密钥

  6. 加密解密

    加密

    1.将明文比特串分组,使得每个分组对应的十进制数小于n(因为十进制数modn的结果,肯定小于n)
    
    2.对明文分组m,作加密运算: c === m^(e) mod n
    pow(m,e,n)
    

    解密

    对密文分组的解密运算为: m ===c^(d) mod n
    
三、安全性分析

RSA的安全性基于 n难以分解成 p * q,那么就计算不了 φ(n),因此密钥 d 的保密性高

对p、q、n、e选取的要求

  • | p -q |要大 否则 p + q 2 \frac{p+q}{2} 2p+q仅仅稍大于 n 1 2 n^\frac{1}{2} n21,顺序检查大于n的整数x,直到 x 2 − n x^2-n x2n是某一整数的平方 即 x 2 − n = y 2 x^2-n=y^2 x2n=y2
 n = (x+y)(x-y)
  • p-1和q-1都应有大素因子、n要小 防止低指数攻击

  • 模数n不要选取一样的 防止共模攻击

最后,消息的发送方是怎样获得接收方的公钥的呢

公钥分配

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值