Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签

Python3.7基于pycryptodome的AES加密解密

安装pycryptodome模块

pip install pycryptodome

AES加密实现

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Random import get_random_bytes

def aes_encrypt(plain_text, key):
    iv = get_random_bytes(16)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    cipher_text = cipher.encrypt(pad(plain_text.encode(), AES.block_size))
    return iv + cipher_text

AES解密实现

from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad

def aes_decrypt(cipher_text, key):
    iv = cipher_text[:16]
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plain_text = unpad(cipher.decrypt(cipher_text[16:]), AES.block_size)
    return plain_text.decode()

示例:

key = get_random_bytes(16)
plain_text = "hello world"
cipher_text = aes_encrypt(plain_text, key)
print(cipher_text)
print(aes_decrypt(cipher_text, key))

Python3.7基于pycryptodome的RSA加密解密

生成RSA密钥对

from Crypto.PublicKey import RSA

def generate_rsa_key_pair():
    key = RSA.generate(2048)
    return key.publickey(), key

RSA加密实现

from Crypto.Cipher import PKCS1_OAEP

def rsa_encrypt(plain_text, public_key):
    cipher = PKCS1_OAEP.new(public_key)
    return cipher.encrypt(plain_text.encode())

RSA解密实现

from Crypto.Cipher import PKCS1_OAEP

def rsa_decrypt(cipher_text, private_key):
    cipher = PKCS1_OAEP.new(private_key)
    plain_text = cipher.decrypt(cipher_text)
    return plain_text.decode()

示例

public_key, private_key = generate_rsa_key_pair()
plain_text = "hello world"
cipher_text = rsa_encrypt(plain_text, public_key)
print(cipher_text)
print(rsa_decrypt(cipher_text, private_key))

Python3.7基于pycryptodome的加签验签

生成RSA密钥对

from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256

def generate_rsa_key_pair():
    key = RSA.generate(2048)
    return key.publickey(), key

RSA私钥加签

def rsa_sign(message, private_key):
    h = SHA256.new(message.encode())
    signature = pkcs1_15.new(private_key).sign(h)
    return signature

RSA公钥验签

def rsa_verify(message, signature, public_key):
    h = SHA256.new(message.encode())
    try:
        pkcs1_15.new(public_key).verify(h, signature)
        return True
    except (ValueError, TypeError):
        return False

示例

public_key, private_key = generate_rsa_key_pair()
message = "hello world"
signature = rsa_sign(message, private_key)
print(signature)
print(rsa_verify(message, signature, public_key))

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python numpy数组复制使用实例解析

    本文将详细介绍Python中使用Numpy数组复制的相关知识,并提供两个使用实例来解析该主题。我们将从以下几个方面进行解释: 什么是Numpy数组 Numpy数组的复制方式 Numpy数组复制的使用实例 什么是Numpy数组 NumPy是一个Python库,它提供了在数值计算方面使用Python的基础结构和工具。它是SciPy、Pandas等数据科学计算库的…

    python 2023年6月5日
    00
  • Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法

    Pycharm中出现ImportError:DLLloadfailed:找不到指定模块的错误通常原因是环境变量或依赖库配置出问题。以下是解决此问题的完整攻略: 1. 确认模块路径是否正确配置 在Pycharm中打开终端,输入echo %PATH%即可查看系统环境变量,确认该环境变量的路径包含了模块所在的文件夹路径。 如果路径没有包含,则需要将该文件夹的路径添…

    python 2023年5月13日
    00
  • Python中tkinter无法同时显示多个image的解决方法及pack与place解析

    让我来为您详细讲解一下关于Python中tkinter无法同时显示多个image的解决方法及pack与place解析的完整攻略。 一、问题描述 在使用Python tkinter GUI库时,我们发现有时无法显示多个image。比如下面这个例子: from tkinter import * from PIL import Image, ImageTk roo…

    python 2023年6月13日
    00
  • Python语法学习之正则表达式的量词汇总

    以下是“Python语法学习之正则表达式的量词汇总”的完整攻略: 一、问题描述 在Python中,正则表达式是一种用于匹配和提取文本数据的强大工具。正则表达式中的量词用于指定匹配的次数,包括匹配0次、1次、多次等情况。本文将详细讲解Python中正则表达式的量词,包括匹配0次、1次、多次等情况,并提供两个示例说明。 二、解决方案 2.1 匹配0次 在正则表达…

    python 2023年5月14日
    00
  • Python 集合的尾调用优化

    在Python中,尾调用优化是指如果一个函数的最后一个操作是一个调用另一个函数的操作,那么Python解释器可以优化这个操作,以便不会在堆栈中创建新的帧。这种优化技术称为“尾调用优化”。 要使Python集合(Set)实现尾调用优化,可以使用递归函数或迭代函数进行操作。下面将介绍两种实现方法: 递归函数实现尾调用优化 示例代码: def tail_recur…

    python-answer 2023年3月25日
    00
  • import的本质解析

    import的本质解析 在Python中,import是一个非常重要的关键字,用于导入模块和包。在本文中,我们将深入探讨import的本质,包括模块搜索路径、模块缓存、动态导入等。 模块搜索路径 在Python中,当我们使用import语句导入模块时,Python解释器会按照一定的顺序搜索模块。具体来说,Python解释器会按照以下顺序搜索模块: 当前目录 …

    python 2023年5月15日
    00
  • python实现dict版图遍历示例

    下面是详细的讲解“Python实现dict版图遍历示例”的攻略。 简介 在Python中,字典是一种非常常用的数据类型。我们可以通过字典实现图遍历的相关操作。在基于字典实现的图中,每个键代表一个节点,对应的值则是它相邻节点的列表。接下来我们将通过两个示例来演示如何基于字典实现图遍历。 示例一:广度优先遍历 问题描述 我们有一个图,如下所示: A: B, C …

    python 2023年6月6日
    00
  • python基础学习之如何对元组各个元素进行命名详解

    下面是针对“python基础学习之如何对元组各个元素进行命名”的详细攻略。 什么是元组? 元组是具有不可变性质的有序序列类型,可以存放多个值,其中的值可以是不同类型的。元组是用圆括号 () 包括起来的。例如: t = (1, 2, 3) 元组的命名方式 Python 提供了一种通过名称访问元组元素的方式,称之为“命名元组”(namedtuple)。它是继承自…

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