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

yizhihongxing

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日

相关文章

  • 最实用的20个python小技巧

    为了让大家更好地学习Python,本站总结了20个最实用的Python小技巧。接下来,我会对这些小技巧进行详细讲解。 1. 使用zip()函数实现多个列表的并行迭代 Python的内置函数zip()可以将多个列表并行迭代,例如: list1 = [1, 2, 3, 4] list2 = [‘a’, ‘b’, ‘c’, ‘d’] for item1, item…

    python 2023年5月13日
    00
  • Python如何输出警告信息

    下面是Python输出警告信息的完整攻略: 1. 使用 warnings 模块 warnings 是Python的一个标准模块,可以用来发出警告信息。该模块提供了进一步的控制,还可以选择将警告转换成异常,以便在代码中引发问题。 示例1: 输出简单警告信息 import warnings def my_function(x): if x < 0: war…

    python 2023年5月13日
    00
  • python Selenium爬取内容并存储至MySQL数据库的实现代码

    Python Selenium爬取内容并存储至MySQL数据库的实现代码 Python Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作,如点击、输入、滚动等。我们可以使用Python Selenium来爬取网页内容,并将其存储至MySQL数据库中。本文将详细讲解Python Selenium爬取内容并存储至MySQL数据库的实现代码,包括…

    python 2023年5月15日
    00
  • Python遍历某目录下的所有文件夹与文件路径

    下面我将为你详细讲解如何使用Python遍历某目录下的所有文件夹与文件路径。 总体思路 实现该功能的关键就是遍历整个目录下的所有文件夹和文件,可以采用递归或迭代的方式实现。 具体实现思路如下: 首先需要获取目标目录的路径。 使用os模块的walk()函数遍历整个目录。 遍历到每一个文件或文件夹时,判断其类型。 若是文件夹,继续递归或迭代遍历该文件夹下的所有文…

    python 2023年5月20日
    00
  • Python中Selenium上传文件的几种方式

    在Python中使用Selenium上传文件是Web自动化测试中的常见需求。本文将详细讲解Python中Selenium上传文件的几种方式,包括使用send_keys方法、使用AutoIT工具、使用pywinauto库等。 使用send_keys方法 使用send_keys方法是最简单的上传文件方式,可以直接将文件路径作为参数传递给send_keys方法。以…

    python 2023年5月15日
    00
  • 浅谈Python中的函数(def)及参数传递操作

    让我来详细讲解一下Python中的函数(def)及参数传递操作的完整攻略。 1. 函数(def)的定义 函数是一段可重复调用的代码块,实现特定功能,并可以传入参数、返回结果。在Python中使用def关键字来定义函数。 示例: def add(a, b): return a + b 以上代码定义了一个名为add的函数,该函数有两个参数a和b,实现的功能是将a…

    python 2023年6月5日
    00
  • Python 阶乘详解

    Python 阶乘详解 本文将详细讲解Python中阶乘的实现方法。阶乘是一个非常基础的数学概念,定义为一个正整数 n 的阶乘是所有小于等于 n 的正整数的积(注:0的阶乘为1)。下面我们将介绍三种不同的实现方法。 方法一:使用循环 使用循环是最简单的计算阶乘的方法。我们可以使用 for 循环来实现: def factorial(n): result = 1…

    python 2023年5月19日
    00
  • 深入理解python中函数传递参数是值传递还是引用传递

    深入理解Python中函数传递参数是值传递还是引用传递是一个常见的问题。在Python中,可以说参数传递并非严格意义上的值传递或引用传递,而是一种比较特殊的“对象引用传递”。 Python中的参数传递 Python中的“对象引用传递”是指:在函数调用时,参数传递进去的是引用,而不是变量的值。当变量是不可变对象(如number、string、tuple)时,因…

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