python密码学RSA密码解密教程
作者:菜鸟教程 发布时间:2023-07-29 17:01:47
标签:python,密码学,RSA,解密
本章是前一章的延续,我们使用RSA算法逐步实现加密,并详细讨论它.
用于解密密文的函数是as跟随 :
def decrypt(ciphertext, priv_key):
cipher = PKCS1_OAEP.new(priv_key)
return cipher.decrypt(ciphertext)
对于公钥加密或非对称密钥加密,重要的是要保持两个重要的功能,即身份验证和授权.
授权
授权是确认发件人是唯一发送邮件的人的过程.以下代码解释了这个 :
def sign(message, priv_key, hashAlg="SHA-256"):
global hash
hash = hashAlg
signer = PKCS1_v1_5.new(priv_key)
if (hash == "SHA-512"):
digest = SHA512.new()
elif (hash == "SHA-384"):
digest = SHA384.new()
elif (hash == "SHA-256"):
digest = SHA256.new()
elif (hash == "SHA-1"):
digest = SHA.new()
else:
digest = MD5.new()
digest.update(message)
return signer.sign(digest)
身份验证
身份验证可以通过验证方法解释,如下所示去;
def verify(message, signature, pub_key):
signer = PKCS1_v1_5.new(pub_key)
if (hash == "SHA-512"):
digest = SHA512.new()
elif (hash == "SHA-384"):
digest = SHA384.new()
elif (hash == "SHA-256"):
digest = SHA256.new()
elif (hash == "SHA-1"):
digest = SHA.new()
else:
digest = MD5.new()
digest.update(message)
return signer.verify(digest, signature)
验证数字签名以及发件人和收件人的详细信息.为安全起见,这会增加更多的权重年龄.
RSA密码解密
您可以使用以下代码进行RSA密码解密 :
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA512, SHA384, SHA256, SHA, MD5
from Crypto import Random
from base64 import b64encode, b64decode
hash = "SHA-256"
def newkeys(keysize):
random_generator = Random.new().read
key = RSA.generate(keysize, random_generator)
private, public = key, key.publickey()
return public, private
def importKey(externKey):
return RSA.importKey(externKey)
def getpublickey(priv_key):
return priv_key.publickey()
def encrypt(message, pub_key):
cipher = PKCS1_OAEP.new(pub_key)
return cipher.encrypt(message)
def decrypt(ciphertext, priv_key):
cipher = PKCS1_OAEP.new(priv_key)
return cipher.decrypt(ciphertext)
def sign(message, priv_key, hashAlg = "SHA-256"):
global hash
hash = hashAlg
signer = PKCS1_v1_5.new(priv_key)
if (hash == "SHA-512"):
digest = SHA512.new()
elif (hash == "SHA-384"):
digest = SHA384.new()
elif (hash == "SHA-256"):
digest = SHA256.new()
elif (hash == "SHA-1"):
digest = SHA.new()
else:
digest = MD5.new()
digest.update(message)
return signer.sign(digest)
def verify(message, signature, pub_key):
signer = PKCS1_v1_5.new(pub_key)
if (hash == "SHA-512"):
digest = SHA512.new()
elif (hash == "SHA-384"):
digest = SHA384.new()
elif (hash == "SHA-256"):
digest = SHA256.new()
elif (hash == "SHA-1"):
digest = SHA.new()
else:
digest = MD5.new()
digest.update(message)
return signer.verify(digest, signature)
来源:https://www.it1352.com/OnLineTutorial/cryptography_with_python/cryptography_with_python_rsa_cipher_decryption.html


猜你喜欢
- python连接clickhouse数据库在Python中获取系统信息的一个好办法是使用psutil这个第三方模块。顾名思义,psutil
- VIM python下的一些关于缩进的设置:第一步: 打开终端,在终端上输入vim ~/.vimrc,回车。 第二步: 添加下面的文段:se
- <?php //设置我们将要使用的文件 $srcurl = "http://localhost/index.php"
- 什么是Flyway?转载:https://blog.waterstrong.me/flyway-in-practice/Flyway is
- 正在看的ORACLE教程是:Oracle不同数据库间对比分析脚本。Oracle数据库开发应用中经常对数据库管理员有这样的需求,对比两个不同实
- 本文深入分析了Python面向对象程序设计OOP。分享给大家供大家参考,具体如下:下面是一个关于OOP的实例,模块文件为person.py#
- 通过第三方库exifread读取照片信息。exifread官网:https://pypi.org/project/ExifRead/一、安装
- 本文实例讲述了Python selenium的基本使用方法。分享给大家供大家参考,具体如下:selenium是一个web自动化测试工具,se
- 说明1、模型集成是指将一系列不同模型的预测结果集成在一起,从而获得更好的预测结果。2、对于模型集成来说,模型的多样性非常重要。Diversi
- 一、工厂模式(Factory Pattern)工厂模式(Factory Pattern),提供了一种实例化(创建)对象的最佳方式。在工厂模式
- linux中,可以使用指令pip install lmdb安装lmdb包。----lmdb 数据库文件生成增 改 删查1、生成一个空的lmd
- 在正式编写爬虫案例前,先对 scrapy 进行一下系统的学习。scrapy 安装与简单运行使用命令 pip install scrapy 进
- 背景最近在测试一款软件的关闭第三方窗口的功能,感觉实现应该挺简单的。所以就尝试了。由于说它的实现是靠c++实现的,本人对c++实在不在行,但
- 本文实例讲述了golang中strconv.ParseInt函数用法。分享给大家供大家参考,具体如下:golang strconv.Pars
- 本文实例分析了Python操作Access数据库基本步骤。分享给大家供大家参考,具体如下:Python编程语言的出现,带给开发人员非常大的好
- 前言栈、队列和优先级队列都是非常基础的数据结构。Python作为一种“编码高效”的语言,对这些基础的数据结构都有比较好的实现。在业务需求开发
- 以下是我开发时碰到的问题以及心得经验,花了些时间调试,贴出来避免大家少走弯路,如有错误欢迎指正,持续更新ing xml文件尽量以
- 由于最近测试需要录制系统界面的操作过程,因为都是全屏的操作,所以用python做一个简单的录屏小工具。实现过程也是比较简单,就是通过对屏幕操
- 要在django项目中定期执行任务,比如每天一定的时间点抓取数据,刷新数据库等,可以参考stackoverflow的方法,先编写一个mana
- 一、常用函数:APP_NAME: 返回当前会话的应用程序名称(如果应用程序进行了设置)。SELECT APP_NAME()COALESCE: