iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >用 Python 来实现 RSA 加解密
  • 250
分享到

用 Python 来实现 RSA 加解密

PythonRSA加解密 2023-05-14 21:05:29 250人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

昨天看到一篇英文文章[1],展示了如何用 python 来实现 RSA 算法,代码的逻辑与前文一文搞懂 RSA 算法一样,不太熟悉 RSA 的朋友可以看一下一文搞懂 RSA 算法,里面对什么是 RSA,RSA 的数学原理进行了说明,并举了一

昨天看到一篇英文文章[1],展示了如何用 python 来实现 RSA 算法,代码的逻辑与前文一文搞懂 RSA 算法一样,不太熟悉 RSA 的朋友可以看一下一文搞懂 RSA 算法,里面对什么是 RSA,RSA 的数学原理进行了说明,并举了一个简单的例子,可以说是全知乎最容易读懂 RSA 的文章了(这话来自读者评论)。

这篇英文提供的代码我运行了下,发现不能加密中文,于是就修改了下加解密的函数,让其支持中文加解密。今天的文章就分享一下如何用 Python 来实现 RSA 加解密的这一过程,帮助你建立 RSA 的直观认识,代码里的随机素数生成算法,也值得我们学习

0、效果演示

咱们先看下效果。

原文:“有内鬼,终止交易”

用 Python 来实现 RSA 加解密

密文,根本无法破解:

用 Python 来实现 RSA 加解密

解密之后:

用 Python 来实现 RSA 加解密

完整代码公众号「Python七号」回复「rsa」获取。

1、密钥对的生成

思路:

1)随机找两个质数(素数) p 和 q,p 与 q 越大,越安全,这里选择 1024 位的质数:

p = genprime(1024)
q = genprime(1024)

genprime() 函数的实现过程先不说。

2)计算他们的乘积 n = p * q 及 欧拉函数 lambda_n。

n = p * q
lambda_n = (p - 1) * (q - 1)

3)随机选择一个整数 e,条件是 1 < e < lambda_n,且 e 与 lambda_n 互质。比如选择 35537,35537 只有 16 位,必然小于 lambda_n。

e = 35537

4)找到一个整数 d,可以使得 e * d 除以 lambda_n 的余数为 1,并返回密钥对。

d = eucalg(e, lambda_n)[0]
if d < 0: d += lambda_n
return (d, n), (e, n)

eucalg 函数的实现放后面说。

至此,密钥对的生成的函数如下:

def create_keys():
 p = genprime(1024)
 q = genprime(1024)
 n = p * q
 lambda_n = (p - 1) * (q - 1)
 e = 35537
 d = eucalg(e, lambda_n)[0]
 if d < 0: d += lambda_n
 return (d, n), (e, n)

2、加解密的实现

加密和解密的过程是一样的,公钥加密,私钥解密,反过来也可以,私钥加密,公钥解密,只不过前者我们叫加密,后者我们叫签名。

具体的函数实现如下:

def encrypt_data(data,key):
e_data = []
for d in data:
 e = modpow(d, key[0], key[1]) 
 e_data.append(e)
return e_data

## 加密和解密的逻辑完全一样
decrypt_data = encrypt_data

这里面用到了 modpow 函数,它用来计算公式 b^e % n = r 的。

  • 如果是加密过程,那么 b 是明文,(n,e)为公钥,r 为密文。
  • 如果是解密过程,那么 b 是密文,(n,d)为私钥,r 为名文。

modpow 的定义如下:

def modpow(b, e, n):
 # find length of e in bits
 tst = 1
 siz = 0
 while e >= tst:
tst <<= 1
siz += 1
 siz -= 1
 # calculate the result
 r = 1
 for i in range(siz, -1, -1):
r = (r * r) % n
if (e >> i) & 1: r = (r * b) % n
 return r

3、随机质数的生成函数

随机质数的生成函数,其中用到了矩阵乘法和斐波那契数列,可见数学对于算法的重要性。

# matrix multiplication
def sqmatrixmul(m1, m2, w, mod):
 mr = [[0 for j in range(w)] for i in range(w)]
 for i in range(w):
for j in range(w):
 for k in range(w):
mr[i][j] = (mr[i][j] + m1[i][k] * m2[k][j]) % mod
 return mr

# fibonacci calculator
def fib(x, mod):
 if x < 3: return 1
 x -= 2
 # find length of e in bits
 tst = 1
 siz = 0
 while x >= tst:
tst <<= 1
siz += 1
 siz -= 1
 # calculate the matrix
 fm = [
# function matrix
[0, 1],
[1, 1]
 ]
 rm = [
# result matrix
# (identity)
[1, 0],
[0, 1]
 ]
 for i in range(siz, -1, -1):
rm = sqmatrixmul(rm, rm, 2, mod)
if (x >> i) & 1:
 rm = sqmatrixmul(rm, fm, 2, mod)

 # second row of resulting vector is result
 return (rm[1][0] + rm[1][1]) % mod

def genprime(siz):
 while True:
num = (1 << (siz - 1)) + secrets.randbits(siz - 1) - 10;
# num must be 3 or 7 (mod 10)
num -= num % 10
num += 3 # 3 (mod 10)
# heuristic test
if modpow(2, num - 1, num) == 1 and fib(num + 1, num) == 0:
 return num
num += 5 # 7 (mod 10)
# heuristic test
if modpow(2, num - 1, num) == 1 and fib(num + 1, num) == 0:
 return num

4、eucalg 函数的实现

函数的本质在于求下面二元一次方程的解:

e * x - lambda_n * y =1

具体代码:

def eucalg(a, b):
 # make a the bigger one and b the lesser one
 swapped = False
 if a < b:
a, b = b, a
swapped = True
 # ca and cb store current a and b in fORM of
 # coefficients with initial a and b
 # a' = ca[0] * a + ca[1] * b
 # b' = cb[0] * a + cb[1] * b
 ca = (1, 0)
 cb = (0, 1)
 while b != 0:
# k denotes how many times number b
# can be substracted from a
k = a // b
# swap a and b so b is always the lesser one
a, b, ca, cb = b, a-b*k, cb, (ca[0]-k*cb[0], ca[1]-k*cb[1])
 if swapped:
return (ca[1], ca[0])
 else:
return ca

5、测试

test.py 脚本使用方法:

1)、生成密钥

python test.py make-keys rsakey

公钥保存在 rsakey.pub 中, 私钥保存在 rsakey.priv 中

2)、对文件内容加密

假如有文件 明文.txt:

python test.py encrypt 明文.txt from rsakey to 密文.txt

将生成 密文.txt

3、 对文件内容解密

假如有文件 密文.txt:

python test.py decrypt 密文.txt as rsakey to 解密后.txt

将生成 解密后.txt

最后的话

本文分享了 RSA 算法的 Python 的简单实现,可以帮助理解 RSA 算法。


以上就是用 Python 来实现 RSA 加解密的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 用 Python 来实现 RSA 加解密

本文链接: https://www.lsjlt.com/news/205805.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 用 Python 来实现 RSA 加解密
    昨天看到一篇英文文章[1],展示了如何用 Python 来实现 RSA 算法,代码的逻辑与前文一文搞懂 RSA 算法一样,不太熟悉 RSA 的朋友可以看一下一文搞懂 RSA 算法,里面对什么是 RSA,RSA 的数学原理进行了说明,并举了一...
    99+
    2023-05-14
    Python RSA 加解密
  • Python实现RSA加密解密
    目录前言一、安装模块二、生成密钥对三、加密四、解密五、完整代码前言 加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加密技...
    99+
    2024-04-02
  • python实现rsa加密
    一 代码 import rsa key = rsa.newkeys(3000)#生成随机秘钥 privateKey = key[1]#私钥 publicKey = key[0]#公钥 message ='sanxi Now is b...
    99+
    2023-01-31
    python rsa
  • Python怎么实现RSA加密解密
    这篇文章主要介绍了Python怎么实现RSA加密解密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python怎么实现RSA加密解密文章都会有所收获,下面我们一起来看看吧。一、安装模块pip inst...
    99+
    2023-06-30
  • python rsa加密解密怎么实现
    在Python中,可以使用`cryptography`库来实现RSA加密和解密。以下是一个示例: from cryptography...
    99+
    2023-10-26
    python
  • 怎么利用Python实现RSA加密解密
    这篇文章主要介绍“怎么利用Python实现RSA加密解密”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用Python实现RSA加密解密”文章能帮助大家解决问题。RSA加密实验基本流程:一、选取...
    99+
    2023-06-29
  • PHP实现RSA加密解密
    目录 安装phpseclib  代码编写 1.依赖引用 2.创建密钥 3.公钥加密 4.私钥解密 总结   安装phpseclib PHP安全通信库phpseclib,可以使用它来操作OpenSSL、GMP、libnaid或mcrypt...
    99+
    2023-09-08
    RSA phpseclib php 非对称加密
  • 利用Python实现RSA加密解密方法实例
    目录前言一、安装模块二、生成密钥对三、加密四、解密五、完整代码总结前言 加密技术在数据安全存储,数据传输中发挥着重要作用,能够保护用户隐私数据安全,防止信息窃取。RSA是一种非对称加...
    99+
    2024-04-02
  • Python RSA加密解密
    一、RSA加密算法 RSA加密算法是一种非对称加密算法,加密的秘钥是由公钥和私钥两部分组成秘钥对,公钥用来加密消息,私钥用来解密消息,公钥是公开的,给对方进行加密,私钥则是用户自己保留,用来对加密的数...
    99+
    2023-09-03
    python RSA 加密 解密
  • Python使用RSA库加密和解密
    一、rsa库(推荐) 1、公钥加密、私钥解密 # -*- coding: utf-8 -*- import rsa # rsa加密 def rsaEncrypt(str): ...
    99+
    2024-04-02
  • RSA加密/解密
    一、RSA加密/解密在线教程 1.1、RSA算法介绍 RSA加密算法是一种可逆的非对称加密算法,即RSA加密时候用的密钥(公钥)和RSA解密时用的密钥(私钥)不是同一把。基本原理是将两个很大的质数相乘很容易得到乘积,但是该乘积分解质因数却很...
    99+
    2023-08-31
    安全 算法 网络安全 服务器 网络
  • Go语言 如何实现RSA加密解密
    RSA是一种非对称加密算法,它的名字是由它的三位开发者,即RonRivest、AdiShamir和LeonardAdleman 的姓氏的首字母组成的(Rivest-Shamir-Ad...
    99+
    2024-04-02
  • Go语言怎么实现RSA加密解密
    这篇文章将为大家详细讲解有关Go语言怎么实现RSA加密解密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。go是什么golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标...
    99+
    2023-06-14
  • RSA如何实现C# 加密
    RSA如何实现C# 加密,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。RSA实现C# 加密首先我们来了解下什么是RSA ,它属于不对称加密,其原理就是使用一个公...
    99+
    2023-06-17
  • java怎么实现rsa加密解密文件
    要在Java中实现RSA加密和解密文件,可以使用Java Cryptography Architecture(JCA)提供的RSA算...
    99+
    2023-10-26
    java
  • Python的RSA加密和PBE加密
    最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现。在网上搜了一下,python的RSA加密这块写的还是比较多的,但是PBE较少。所以我就讲讲我在RSA加密上面...
    99+
    2023-01-31
    Python RSA PBE
  • JAVA 如何实现解密RSA算法并使用JS加密
    JAVA 如何实现解密RSA算法并使用JS加密?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。JAVA 中解密RSA算法JS加密实例详解有这样一个需求,前端登录的用户名密码,...
    99+
    2023-05-31
    java js加密 rsa算法
  • RSA加密实现之JAVA方式
    package com.xxxx.tax.util;import com.xxxxx.tax.util.ExceptionUtil;import lombok.extern.log4j.Log4j;import java.io.ByteAr...
    99+
    2023-09-28
    java 开发语言
  • RSA在线加解密
    RSA加密、RSA解密 - devTest.run          RSA算法是目前最经典、最常用的公钥加密算法之一,广泛应用于加密通信、文件加密、数字签名等领域。为了方便用户进行RSA加密操作,现在有一款易于使用的在线RSA加密工具,...
    99+
    2023-09-11
    服务器 安全 RSA RSA加密 RSA解密
  • Vue项目如何实现rsa加密
    目录如何实现rsa加密安装jsencrypt引入jsencrypt获取公钥(调接口)引入getPubKey使用rsa加密,解密,加签,解签安装引js加密解密加签,验签测试如何实现rs...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作