Python实现RSA加密算法
RSA介绍
RSA加密算法是由美国麻省理工学院的3名密码学者Rivest、Shamir、Adleman提出的一种基于大合数因式分解困难性的公共弄开密钥密码。由于它的安全、易懂,因此已成为目前应用最广的公开密钥密码
加密过程
- 随机选择两个大素数p和q,p和q都保密
- 计算n=pq,将n公开
- 计算 φ(n) =(p-1) * (q-1),r=φ(n),r和φ(n)保密
- 随机选取一个正整数e,1<e<r且e与r互素,正常环境下e取65537,其二进制数表示只有两个1,且为素数,将e公开,(n,e)就构成了用户公钥。
- 根据ed≡1 mod r ,(≡表示模同余运算),计算出d,将d,保密。(n,d)就构成了用户私钥
- 加密运算:C=M^e mod n
- 解密运算:M=C^e mod n
RSA参数选择
为确保RSA密码安全,必须认真选择RSA密码参数
- p和q要足够大,n才足够大,才能对抗因式分解
- p和q应为强素数
- 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加密算法相关推荐
- 使用Python实现RSA加密算法及详解RSA算法
代码已经放上github : https://github.com/chroje/RSA 一.非对称加密算法 1.乙方生成两把密钥(公钥和私钥).公钥是公开的,任何人都可以获得,私钥则是保密的. 2. ...
- python使用RSA加密算法
上一篇文章介绍了RSA加密原理以及自己的一些理解,现在我们就来实际操作一下,使用python语言如何来实现RSA的加密-解密-签名-验签这一系列过程. ##一.生成公钥.私钥对 使用openssl工具 ...
- python实现非对称加密算法_Python使用rsa模块实现非对称加密与解密
Python使用rsa模块实现非对称加密与解密 1.简单介绍: RSA加密算法是一种非对称加密算法 是由已知加密密钥推导出解密密钥在计算上是不可行的"密码体制.加密密钥(即公开密钥)PK是公 ...
- RSA加密算法Python实现
RSA加密算法Python实现 1.RSA算法简介 2.RSA算法涉及的数学知识 2.1互素 2.2 欧拉定理 2.3求模逆元 2.4 取模运算 2.5 最大公因数 2.6 最小公倍数 2.7 欧几里 ...
- RSA加密算法简单介绍以及python实现
RSA加密算法简单介绍 注:本篇文章只是本人在学完RSA加密之后的个人总结,若有不正确的地方,欢迎指正OVO RSA是一种公钥加密算法,它具有公钥和私钥两种密钥:公钥用来加密,并且是公开的,私钥是用来 ...
- python实现rsa加密源代码_python实现RSA加密(解密)算法
RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠 ...
- python实现rsa数据加密_python实现RSA与AES混合加密
RSA加密 这是一种非对称加密算法,密钥分为公钥和私钥.通常私钥长度有512bit,1024bit,2048bit,4096bit,长度越长,越安全,但是生成密钥越慢,加解密也越耗时.一般公钥用来加密 ...
- python实现rsa加密解密代码_使用python实现rsa算法代码
RSA算法是一种非对称加密算法,是现在广泛使用的公钥加密算法,主要应用是加密信息和数字签名. 维基百科给出的RSA算法简介如下: 假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息.她可以 ...
- 快速了解什么是RSA加密算法
1.什么是RSA 加密算法有对称加密和非对称加密. 对称加密是指发送方和接收方使用相同的一种规则对信息进行处理,因为双方使用的是相同的规则和密钥,所以一旦密钥泄露,那么再强大的加密也将毫无用处. 所有 ...
最新文章
- HighCharts使用心得
- iOS开发学无止境 - UICollectionView自定义布局之风火轮[译]
- 开源监控软件ganglia安装手册
- loadrunner简单的例子(demo)
- BZOJ 1012 [JSOI2008]最大数maxnumber
- jmeter连数据库
- 打印字符(信息学奥赛一本通-T1021)
- 【Flink】Insufficient number of network buffers required but only available
- 小白设计模式:策略模式
- poj 3411 Paid Roads
- 什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
- Hdu-5769 Substring (SA后缀数组)
- Windows下安装PyQt4+python2.7+(nltk+wordcloud+jieba+pyinstaller打包)——词频分析软件
- origin做主成分分析图_Origin如何进行主成分分析
- 学完了Scratch,我要开始学Python了~~~
- Transformer课程 业务对话机器人Rasa 3.x Reaching Out to the User
- Bloxorz POJ3322
- 打开计算机管理窗口命令,Win7如何打开命令行窗口?打开命令行窗口的方法
- swoole运行的时候提示端口被占用问题
- 世界上最美的晚秋,美过油画,令人叫绝!