Python中常见的加密解密算法总结

Python中常见的加密解密算法总结

在Python中,有许多常见的加密解密算法,包括对称加密算法、非对称加密算法、哈希算法等。本文将对这些算法进行总结,并提供两个示例说明。

对称加密算法

对称加密算法是一种加密方式,它使用相同的密钥进行加密和解密。常见的对称加密算法包括AES、DES、3DES等。

示例1:使用AES对称加密算法加密和解密数据

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def encrypt_AES_GCM(data, key):
    cipher = AES.new(key, AES.MODE_GCM)
    nonce = cipher.nonce
    ciphertext, tag = cipher.encrypt_and_digest(data)
    return nonce + ciphertext + tag

def decrypt_AES_GCM(ciphertext, key):
    nonce = ciphertext[:16]
    tag = ciphertext[-16:]
    ciphertext = ciphertext[16:-16]
    cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
    data = cipher.decrypt_and_verify(ciphertext, tag)
    return data

key = get_random_bytes(16)
data = b'Hello, world!'
ciphertext = encrypt_AES_GCM(data, key)
plaintext = decrypt_AES_GCM(ciphertext, key)

print('Key:', key)
print('Ciphertext:', ciphertext)
print('Plaintext:', plaintext)

在这个示例中,我们使用Crypto库中的AES模块实现了对称加密算法。我们首先定义了encrypt_AES_GCM和decrypt_AES_GCM两个函数,分别用于加密和解密数据。我们使用get_random_bytes函数生成一个16字节的随机密钥key。我们使用AES.new函数创建一个AES对象cipher,并使用MODE_GCM模式进行加密。我们使用cipher.nonce获取一个16字节的随机数nonce,使用cipher.encrypt_and_digest函数对数据进行加密,并获取密文ciphertext和tag。我们将nonce、ciphertext和tag拼接在一起,返回加密后的数据。

在decrypt_AES_GCM函数中,我们首先从密文中获取nonce和tag,使用ciphertext[16:-16]获取加密后的数据。我们使用AES.new函数创建一个AES对象cipher,并使用MODE_GCM模式进行解密。我们使用cipher.decrypt_and_verify函数对数据进行解密,并获取明文data。最后,我们返回解密后的数据。

在主程序中,我们使用get_random_bytes函数生成一个16字节的随机密钥key,使用b'Hello, world!'作为待加密的数据。我们使用encrypt_AES_GCM函数对数据进行加密,使用decrypt_AES_GCM函数对数据进行解密。最后,我们输出密钥、密文和明文。

非对称加密算法

非对称加密算法是一种加密方式,它使用公钥和私钥进行加密和解密。常见的非对称加密算法包括RSA、DSA、ECC等。

示例2:使用RSA非对称加密算法加密和解密数据

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

def encrypt_RSA_OAEP(data, public_key):
    cipher = PKCS1_OAEP.new(public_key)
    ciphertext = cipher.encrypt(data)
    return ciphertext

def decrypt_RSA_OAEP(ciphertext, private_key):
    cipher = PKCS1_OAEP.new(private_key)
    data = cipher.decrypt(ciphertext)
    return data

key = RSA.generate(2048)
public_key = key.publickey()
private_key = key

data = b'Hello, world!'
ciphertext = encrypt_RSA_OAEP(data, public_key)
plaintext = decrypt_RSA_OAEP(ciphertext, private_key)

print('Public key:', public_key.export_key())
print('Private key:', private_key.export_key())
print('Ciphertext:', ciphertext)
print('Plaintext:', plaintext)

在这个示例中,我们使用Crypto库中的RSA模块实现了非对称加密算法。我们首先定义了encrypt_RSA_OAEP和decrypt_RSA_OAEP两个函数,分别用于加密和解密数据。我们使用RSA.generate函数生成一个2048位的RSA密钥对key,使用key.publickey()获取公钥public_key,使用key获取私钥private_key。

在encrypt_RSA_OAEP函数中,我们使用PKCS1_OAEP.new函数创建一个PKCS1_OAEP对象cipher,并使用公钥进行加密。我们使用cipher.encrypt函数对数据进行加密,并获取密文ciphertext。最后,我们返回加密后的数据。

在decrypt_RSA_OAEP函数中,我们使用PKCS1_OAEP.new函数创建一个PKCS1_OAEP对象cipher,并使用私钥进行解密。我们使用cipher.decrypt函数对数据进行解密,并获取明文data。最后,我们返回解密后的数据。

在主程序中,我们使用RSA.generate函数生成一个2048位的RSA密钥对key,使用b'Hello, world!'作为待加密的数据。我们使用encrypt_RSA_OAEP函数对数据进行加密,使用decrypt_RSA_OAEP函数对数据进行解密。最后,我们输出公钥、私钥、密文和明文。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中常见的加密解密算法总结 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python 如何限制输出日志的大小

    限制Python输出日志的大小,是通过设置日志记录器的处理器来实现的。可以通过Python内置的logging模块来实现这个目标。具体步骤如下: 1. 创建日志记录器 使用logging.getLogger()方法创建一个记录器对象。可以为这个记录器对象设置名称,方便后续调用和管理。 import logging logger = logging.getLo…

    python 2023年6月5日
    00
  • python获取命令行参数实例方法讲解

    下面是Python获取命令行参数的实例方法攻略: 目录 为什么需要命令行参数? 获取命令行参数的三种方法 方法一:sys.argv 方法二:argparse 方法三:click 示例1:sys.argv的使用 示例2:argparse的使用 为什么需要命令行参数? 命令行参数指的是在命令行中输入程序执行命令时,传递给程序的参数。比如在命令行执行 python…

    python 2023年6月3日
    00
  • python os.path.isfile 的使用误区详解

    让我们来详细讲解一下“python os.path.isfile 的使用误区详解”。 什么是 os.path.isfile os.path.isfile(path) 是 Python 库中用于检测文件是否存在以及路径是否为文件的函数。 它接受一个参数 path,用来指定需要检测的文件路径。如果路径是一个文件,则返回 True;否则返回 False。 os.p…

    python 2023年6月2日
    00
  • python如何去除字符串中不想要的字符

    下面是Python如何去除字符串中不想要的字符的完整攻略: 步骤1:确定要去除的字符类型 字符串中的字符类型很多,比如空格、制表符、换行符、标点符号等等。在使用Python去除字符串中不想要的字符之前,需要先确定需要去除哪一种或哪几种字符类型。 步骤2:使用字符串方法去除字符 Python的字符串类型有很多有用的方法,可以用来去除字符串中不想要的字符。在这里…

    python 2023年6月5日
    00
  • 如何使用Python在MySQL中使用排序查询?

    在MySQL中,可以使用ORDER BY子句对查询结果进行排序。在Python中,可以使用MySQL连接来执行排序查询。以下是在Python中使用排序查询的完整攻略,包括排序查询的基本语法、使用排序查询的例以及如何在中使用排序查询。 排序查询的基本语法 排序查询的基本语法如下: SELECT column_name(s) FROM table_name OR…

    python 2023年5月12日
    00
  • python操作csv格式文件之csv.DictReader()方法

    让我来介绍一下“python操作csv格式文件之csv.DictReader()方法”的完整攻略。 什么是csv格式文件? CSV是Comma Separated Values缩写的简称,意为“逗号分隔值”,它是一种文本文件,可以简单地表示表格数据。CSV格式文件不同于微软Excel或OpenOffice Calc的电子表格文件,它没有单元格或者其他表格式的…

    python 2023年5月13日
    00
  • Python 爬虫爬取指定博客的所有文章

    下面是 Python 爬虫爬取指定博客的所有文章的完整攻略: 1. 获取网页源代码 无论是用什么语言编写爬虫,第一步都需要获取目标网站的 HTML 或者 XML 源代码。Python 中可以利用 requests 库实现该操作。具体代码如下: import requests # 指定目标博客的 URL 地址 url = ‘http://target_blog…

    python 2023年5月14日
    00
  • Python解析nginx日志文件

    下面我将详细讲解“Python解析nginx日志文件”的完整攻略。 一、背景 nginx 是一款高性能的 Web 服务器软件,广泛应用于互联网中。而对于 nginx 服务器日志的处理也是非常重要的,通过分析日志可以了解访问量、访问方式、访问区域等信息,这些信息可以帮助我们更好地了解用户需求,优化网站架构,提高用户体验。 二、准备工作 在正式解析 nginx …

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部