- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python3非对称加密算法RSA实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了python3非对称加密算法rsa。分享给大家供大家参考,具体如下:
python3 可以使用 crypto.publickey.rsa 和 rsa 生成公钥、私钥.
其中 python3.6 crypto 库的安装方式请参考前面一篇《python3对称加密算法aes、des3》 。
rsa 加解密的库使用 pip3 install rsa 就行了 。
c:\windows\system32>pip3 install rsa collecting rsa downloading https://files.pythonhosted.org/packages/e1/ae/baedc9cb175552e95f3395c43055a6a5e125ae4d48a1d7a924baca83e92e/rsa-3.4.2-py2.py3-none-any.whl (46kb) 100% |████████████████████████████████| 51kb 99kb/s collecting pyasn1>=0.1.3 (from rsa) downloading https://files.pythonhosted.org/packages/a0/70/2c27740f08e477499ce19eefe05dbcae6f19fdc49e9e82ce4768be0643b9/pyasn1-0.4.3-py2.py3-none-any.whl (72kb) 100% |████████████████████████████████| 81kb 289kb/s installing collected packages: pyasn1, rsa successfully installed pyasn1-0.4.3 rsa-3.4.2 。
使用 crypto.publickey.rsa 生成公钥、私钥:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import
crypto.publickey.rsa
import
crypto.random
x
=
crypto.publickey.rsa.generate(
2048
)
a
=
x.exportkey(
"pem"
)
# 生成私钥
b
=
x.publickey().exportkey()
# 生成公钥
with
open
(
"a.pem"
,
"wb"
) as x:
x.write(a)
with
open
(
"b.pem"
,
"wb"
) as x:
x.write(b)
y
=
crypto.publickey.rsa.generate(
2048
, crypto.random.new().read)
# 使用 crypto.random.new().read 伪随机数生成器
c
=
y.exportkey()
# 生成私钥
d
=
y.publickey().exportkey()
#生成公钥
with
open
(
"c.pem"
,
"wb"
) as x:
x.write(c)
with
open
(
"d.pem"
,
"wb"
) as x:
x.write(d)
|
使用 crypto.publickey.rsa.importkey(private_key) 生成公钥和证书:
1
2
3
4
5
6
7
8
9
|
import
crypto.publickey.rsa
with
open
(
"a.pem"
,
"rb"
) as x:
xx
=
crypto.publickey.rsa.importkey(x.read())
b
=
xx.publickey().exportkey()
# 生成公钥
with
open
(
"b.pem"
,
"wb"
) as x:
x.write(b)
a
=
xx.exportkey(
"der"
)
# 生成 der 格式的证书
with
open
(
"a.der"
,
"wb"
) as x:
x.write(a)
|
使用 rsa 生成公钥、私钥:
1
2
3
4
5
6
7
8
|
import
rsa
f, e
=
rsa.newkeys(
2048
)
# 生成公钥、私钥
e
=
e.save_pkcs1()
# 保存为 .pem 格式
with
open
(
"e.pem"
,
"wb"
) as x:
# 保存私钥
x.write(e)
f
=
f.save_pkcs1()
# 保存为 .pem 格式
with
open
(
"f.pem"
,
"wb"
) as x:
# 保存公钥
x.write(f)
|
rsa非对称加密算法实现:
使用crypto模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import
crypto.publickey.rsa
import
crypto.cipher.pkcs1_v1_5
import
crypto.random
import
crypto.signature.pkcs1_v1_5
import
crypto.
hash
y
=
b
"abcdefg1234567"
with
open
(
"b.pem"
,
"rb"
) as x:
b
=
x.read()
cipher_public
=
crypto.cipher.pkcs1_v1_5.new(crypto.publickey.rsa.importkey(b))
cipher_text
=
cipher_public.encrypt(y)
# 使用公钥进行加密
with
open
(
"a.pem"
,
"rb"
) as x:
a
=
x.read()
cipher_private
=
crypto.cipher.pkcs1_v1_5.new(crypto.publickey.rsa.importkey(a))
text
=
cipher_private.decrypt(cipher_text, crypto.random.new().read)
# 使用私钥进行解密
assert
text
=
=
y
# 断言验证
with
open
(
"c.pem"
,
"rb"
) as x:
c
=
x.read()
c_rsa
=
crypto.publickey.rsa.importkey(c)
signer
=
crypto.signature.pkcs1_v1_5.new(c_rsa)
msg_hash
=
crypto.
hash
.sha256.new()
msg_hash.update(y)
sign
=
signer.sign(msg_hash)
# 使用私钥进行'sha256'签名
with
open
(
"d.pem"
,
"rb"
) as x:
d
=
x.read()
d_rsa
=
crypto.publickey.rsa.importkey(d)
verifer
=
crypto.signature.pkcs1_v1_5.new(d_rsa)
msg_hash
=
crypto.
hash
.sha256.new()
msg_hash.update(y)
verify
=
verifer.verify(msg_hash, sign)
# 使用公钥验证签名
print
(verify)
|
运行结果:
true 。
使用 rsa 模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import
rsa
y
=
b
"abcdefg1234567"
with
open
(
"e.pem"
,
"rb"
) as x:
e
=
x.read()
e
=
rsa.privatekey.load_pkcs1(e)
# load 私钥
with
open
(
"f.pem"
,
"rb"
) as x:
f
=
x.read()
f
=
rsa.publickey.load_pkcs1(f)
# load 公钥,由于之前生成的私钥缺少'rsa'字段,故无法 load
cipher_text
=
rsa.encrypt(y, f)
# 使用公钥加密
text
=
rsa.decrypt(cipher_text, e)
# 使用私钥解密
assert
text
=
=
y
# 断言验证
sign
=
rsa.sign(y, e,
"sha-256"
)
# 使用私钥进行'sha256'签名
verify
=
rsa.verify(y, sign, f)
# 使用公钥验证签名
print
(verify)
|
运行结果:
true 。
希望本文所述对大家python程序设计有所帮助.
原文链接:https://blog.csdn.net/qq_42486920/article/details/80863322 。
最后此篇关于Python3非对称加密算法RSA实例详解的文章就讲到这里了,如果你想了解更多关于Python3非对称加密算法RSA实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
这个问题已经有答案了: Reverse the ordering of words in a string (48 个回答) 已关闭 4 年前。 我想更改字符串中单词的位置。它需要对称变化。 示例 m
我的公司将为客户存储敏感数据,并将使用托管 .NET 加密算法类之一来加密数据。大部分工作已经完成,但我们还没有弄清楚如何/在哪里存储 key 。我已经做了一些简单的搜索和阅读,看起来硬件解决方案可能
我在 postgres 和对称 ds 的默认配置中使用对称 ds。 我总是收到以下错误。 2017-12-20 09:59:53,372 INFO [SymmetricLauncher] [Wrap
我正在使用 postgresql8.3 并在我的应用程序中包含 symmetris ds 1.5.1。但客户端到服务器的复制工作正常。但复制不是从服务器到客户端完成的。我是使用对称 ds 的新手。任何
我正在寻找一种与 JavaScript 和 Java 兼容的安全对称 key 加密算法。 我已经尝试实现一个,但我遇到了一些编码问题。 最佳答案 您不想使用 JavaScript 加密,especia
我读过 DDA .但我刚刚遇到symmetric DDA 这个术语。它是什么 ?它与 DDA 有何不同? 最佳答案 DDA(数字差分分析仪)算法用于找出任意给定两点之间的线性插值点(即直线)。现在,由
我已经使用 Spring Cloud Config Server 设置了一个简单的项目,我正在尝试简单地加密和解密一些值。我使用以下带有 Spring Boot 的 pom.xml 将项目创建为 Sp
我需要通过扩展 Symmetric DS 提供的接口(interface)来扩展它的功能。有谁知道开发流程应该是什么?在文档中,它只解释了将 JAR 文件(包含扩展接口(interface)的类)放在
我将在 中最多包含 50 个条目 map 。这样做的原因是我在初始握手后使用的协议(protocol)通过数字引用字符串名称 - 我假设服务器上必须存在与我的类似的 map 。 我想要的是一个可以搜
我在尝试编写这些函数时遇到困难。他们工作不正常,不知道我做错了什么。至于 Transitive,我什至无法开始,希望你能提供任何帮助,以及我在我的功能中做错了什么。谢谢。 示例输入: 0 1 2 3
什么是加密 SQL 数据库中某些敏感或个人身份数据的“最佳实践”(根据 PCI、HIPAA 或其他适用的合规性标准)? 这里有很多关于解决方案各个方面的问题,但我还没有看到任何在高层次上讨论该方法的问
我必须创建一个六边形,我真的希望它是完整的 HTML 和 CSS。它几乎完成了,除了它不是完全对称的。左 Angular 与右 Angular 不对齐。当前的CSS: .hexagon.outer {
我发现:“唯一需要 TURN 的情况是当其中一个对等点位于对称 NAT 后面,而另一个对等点位于对称 NAT 或端口限制 NAT 后面时。”那么,对称 NAT 后面的对等点如何连接后面的另一个点(例如
如何有效地按行的范数对矩阵进行排序(使用 numpy.ndarrays)? 我想对矩阵 A 进行排序: A = np.array( ( [ 10, 1, 6, 3 ],
我正在尝试使用 MBED TLS 加密函数来解开已使用我拥有的对称 key 使用 AES-128 key 包装进行加密的 key 。 我是加密新手,我的理解是 key 包装/解开与加密/解密不同。这是
所以基本上我的程序从用户选择的文本文件中加密/解密字符串。他可以选择五种算法之一。问题是当我用例如创建密文时。 AES然后将此密文保存到文本文件中,并想解密它以获取原始字符串,这是行不通的。有人可以指
我正在开展一个 OpenCL 项目以生成非常大的厄尔米特(对称)矩阵,并且我正在尝试确定生成工作 ID 的最佳方式。 厄密矩阵沿对角线对称,因此 M(i,j) = M*(j,i)。 在暴力方式下,fo
我想让底部圆圈对称,这意味着我希望第 5 个圆圈介于第 1 和第 2 个(但仍在下方)之间,第 7 个圆圈介于第 3 和第 4 个之间。 我在 v-for 循环中显示这个圆圈。我将它们全部放在一个容器
对于固定维数 (N=9) 的稠密线性系统(矩阵是对称的,半正定的)的快速求解,您会推荐哪种算法? 高斯消元法 LU分解 Cholesky 分解 等等? 类型是 32 位和 64 位 float 。 这
我有一个尺寸为行 x 列 x 深度的 3D 图像。对于图像中的每个体素,我计算了一个 3x3 实对称矩阵。它们存储在数组 D 中,因此具有形状 (rows, cols, deps, 6)。 D 为图像
我是一名优秀的程序员,十分优秀!