RSA介绍

RSA加密算法是由美国麻省理工学院的3名密码学者Rivest、Shamir、Adleman提出的一种基于大合数因式分解困难性的公共弄开密钥密码。由于它的安全、易懂,因此已成为目前应用最广的公开密钥密码

加密过程

  1. 随机选择两个大素数p和q,p和q都保密
  2. 计算n=pq,将n公开
  3. 计算 φ(n) =(p-1) * (q-1),r=φ(n),r和φ(n)保密
  4. 随机选取一个正整数e,1<e<r且e与r互素,正常环境下e取65537,其二进制数表示只有两个1,且为素数,将e公开,(n,e)就构成了用户公钥。
  5. 根据ed≡1 mod r ,(≡表示模同余运算),计算出d,将d,保密。(n,d)就构成了用户私钥
  6. 加密运算:C=M^e mod n
  7. 解密运算:M=C^e mod n

RSA参数选择
为确保RSA密码安全,必须认真选择RSA密码参数

  1. p和q要足够大,n才足够大,才能对抗因式分解
  2. p和q应为强素数
  3. p和q的差要大,即|p-q|要大

以下是用python3.X实习的rsa加密算法,可以参考一下

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Hacimport math
import random#生成素数数组def prime_array():arraya = []for i in range(2,2000):x = prime(i,2)if x:arraya.append(i)return arraya#判断是否为素数
def prime(n,test_divisor):if math.sqrt(n) < test_divisor:return Trueif n % test_divisor == 0:return Falseelse:return prime(n,test_divisor+1)#互质e
def co_prime(r):while True:e = random.choice(range(2000))if r < e:x =gcd(e,r)else:x = gcd(r,e)if x == 1:breakreturn e#最大公约数
def gcd(a,b):if b == 0:return aelse:return gcd(b,a % b)#ed mod r =1
def find_d(e,r):for d in range(10000000):x = (e*d) % rif x == 1:return d#生成公钥私钥的基本条件
def test():a = prime_array()print("前2000个素数:",a)p = random.choice(a)q = random.choice(a)print("随机抽取两个素数p&q,p=",p,"q=",q)n = p*qr = (p-1)*(q-1)#fye = co_prime(r)print("根据互质得到e=",e)d = find_d(e,r)print("求到模逆元d,d=",d)pbvk=(n,e,d)return pbvk#生成public key & private key
def generate_pbk_pvk(a,zx):pbk = (a[0],a[1])pvk = (a[0],a[2])print("pbk:",pbk,"pvk;",pvk)if zx == 0:return pbkif zx == 1:return pvk#加密
def encryption(mw,ned):
# 密文b = 明文a的e次方 模 n,ned为公钥
#mw为明文a,ned【1】是e,ned【0】是nB = pow(mw,ned[1]) % ned[0]return B#解密
def decode(mw,ned):C = pow(mw,ned[1]) % ned[0]return Cif __name__=='__main__':pbvk = test()pbk = generate_pbk_pvk(pbvk, 0) #公钥 if 0 return pbk if 1 return pvkA = int(input("请输入明文(需小于%d): " % pbk[0]))while A >= pbk[0]:A = int(input("明文大于%d,请重新输入:" % pbk[0]))if not A >= pbk[0]:breakB = encryption(A,pbk) #加密print("生成的密文是: ", B)pvk = generate_pbk_pvk(pbvk, 1) #私钥C = decode(B,pvk) #解密print("解密后的明文是  : ", C)if A==C:print("加密前的明文和解密后的明文一样")else:print("加密前的明文和解密后的明文不一样")

这个代码只是最基础的,只能实现一些数字加密与解密,代码参考熊與猫v如果有什么不足还请大佬们指教

Python实现RSA加密算法相关推荐

  1. 使用Python实现RSA加密算法及详解RSA算法

    代码已经放上github : https://github.com/chroje/RSA 一.非对称加密算法 1.乙方生成两把密钥(公钥和私钥).公钥是公开的,任何人都可以获得,私钥则是保密的. 2. ...

  2. python使用RSA加密算法

    上一篇文章介绍了RSA加密原理以及自己的一些理解,现在我们就来实际操作一下,使用python语言如何来实现RSA的加密-解密-签名-验签这一系列过程. ##一.生成公钥.私钥对 使用openssl工具 ...

  3. python实现非对称加密算法_Python使用rsa模块实现非对称加密与解密

    Python使用rsa模块实现非对称加密与解密 1.简单介绍: RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制.加密密钥(即公开密钥)PK是公 ...

  4. RSA加密算法Python实现

    RSA加密算法Python实现 1.RSA算法简介 2.RSA算法涉及的数学知识 2.1互素 2.2 欧拉定理 2.3求模逆元 2.4 取模运算 2.5 最大公因数 2.6 最小公倍数 2.7 欧几里 ...

  5. RSA加密算法简单介绍以及python实现

    RSA加密算法简单介绍 注:本篇文章只是本人在学完RSA加密之后的个人总结,若有不正确的地方,欢迎指正OVO RSA是一种公钥加密算法,它具有公钥和私钥两种密钥:公钥用来加密,并且是公开的,私钥是用来 ...

  6. python实现rsa加密源代码_python实现RSA加密(解密)算法

    RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...

  7. python实现rsa数据加密_python实现RSA与AES混合加密

    RSA加密 这是一种非对称加密算法,密钥分为公钥和私钥.通常私钥长度有512bit,1024bit,2048bit,4096bit,长度越长,越安全,但是生成密钥越慢,加解密也越耗时.一般公钥用来加密 ...

  8. python实现rsa加密解密代码_使用python实现rsa算法代码

    RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名. 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息.她可以 ...

  9. 快速了解什么是RSA加密算法

    1.什么是RSA 加密算法有对称加密和非对称加密. 对称加密是指发送方和接收方使用相同的一种规则对信息进行处理,因为双方使用的是相同的规则和密钥,所以一旦密钥泄露,那么再强大的加密也将毫无用处. 所有 ...

最新文章

  1. HighCharts使用心得
  2. iOS开发学无止境 - UICollectionView自定义布局之风火轮[译]
  3. 开源监控软件ganglia安装手册
  4. loadrunner简单的例子(demo)
  5. BZOJ 1012 [JSOI2008]最大数maxnumber
  6. jmeter连数据库
  7. 打印字符(信息学奥赛一本通-T1021)
  8. 【Flink】Insufficient number of network buffers required but only available
  9. 小白设计模式:策略模式
  10. poj 3411 Paid Roads
  11. 什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
  12. Hdu-5769 Substring (SA后缀数组)
  13. Windows下安装PyQt4+python2.7+(nltk+wordcloud+jieba+pyinstaller打包)——词频分析软件
  14. origin做主成分分析图_Origin如何进行主成分分析
  15. 学完了Scratch,我要开始学Python了~~~
  16. Transformer课程 业务对话机器人Rasa 3.x Reaching Out to the User
  17. Bloxorz POJ3322
  18. 打开计算机管理窗口命令,Win7如何打开命令行窗口?打开命令行窗口的方法
  19. swoole运行的时候提示端口被占用问题
  20. 世界上最美的晚秋,美过油画,令人叫绝!

热门文章

  1. 既然有 HTTP 请求,为什么还要用 RPC 调用?
  2. 除了Axure,还有哪些原型设计工具
  3. 校园IPTV数字电视教学直播系统在淮安生态文旅区实验小学的应用
  4. 湘潭大学2022软件工程程序设计实践平时练习一C/C++
  5. 康惠保2.0,单次赔付重疾险里的荣耀王者?
  6. excel调色板自定颜色_抓住Excel调色板
  7. .NET动态生成PDF文件(利用iTextSharp)
  8. mocha测试js教程(涉及es6、ts)
  9. 客运行业发展现状分析
  10. 自动抠图,一个细致都透明头发丝都能抠出来的开源项目