Python案例分享:如何实现信息的加解密

简介: Python案例分享:如何实现信息的加解密

在Python中实现信息的加解密,我们可以使用多种加密算法,但为了简单起见,这里我将展示如何使用AES(高级加密标准)算法进行信息的加密和解密。AES是一种广泛使用的对称加密算法,意味着加密和解密使用相同的密钥。

为了使用AES算法,我们将使用Python的pycryptodome库,它是PyCrypto的一个分支,提供了更广泛的加密算法支持。如果你还没有安装pycryptodome,你可以通过pip安装它:

bash复制代码
pip install pycryptodome

下面是使用AES算法进行信息加解密的Python代码示例:

from Crypto.Cipher import AES  
from Crypto.Random import get_random_bytes  
from Crypto.Util.Padding import pad, unpad  
from binascii import hexlify, unhexlify  
  
class AESCipher:  
    def __init__(self, key=None):  
        """  
        初始化AES加密器。如果未提供密钥,则自动生成一个AES-128位密钥。  
        """  
        if key is None:  
            self.key = get_random_bytes(16)  # AES-128位密钥  
        else:  
            if len(key) not in [16, 24, 32]:  
                raise ValueError("密钥长度必须是16(AES-128)、24(AES-192)或32(AES-256)字节")  
            self.key = key  
  
    def encrypt(self, plaintext):  
        """  
        加密明文并返回密文的十六进制字符串。  
        """  
        # 生成一个随机的初始化向量(IV)  
        iv = get_random_bytes(AES.block_size)  
        # 创建一个AES cipher对象,使用CBC模式  
        cipher = AES.new(self.key, AES.MODE_CBC, iv)  
        # 对明文进行填充  
        padded_data = pad(plaintext.encode('utf-8'), AES.block_size)  
        # 加密  
        encrypted = cipher.encrypt(padded_data)  
        # 将IV和加密后的数据拼接在一起,但这里我们只返回加密数据的十六进制字符串  
        # 在实际应用中,你可能需要将IV和加密数据一起存储或传输  
        return iv.hex() + ':' + encrypted.hex()  # 使用冒号分隔IV和加密数据,仅作为示例  
  
    def decrypt(self, ciphertext_hex):  
        """  
        解密密文的十六进制字符串并返回明文。  
        """  
        # 从十六进制字符串中分离出IV和加密后的数据  
        iv_hex, encrypted_hex = ciphertext_hex.split(':', 1)  
        iv = unhexlify(iv_hex)  
        encrypted_data = unhexlify(encrypted_hex)  
        # 创建一个AES cipher对象,使用相同的IV和密钥  
        cipher = AES.new(self.key, AES.MODE_CBC, iv)  
        # 解密  
        decrypted_padded = cipher.decrypt(encrypted_data)  
        # 去除填充  
        try:  
            decrypted_text = unpad(decrypted_padded, AES.block_size).decode('utf-8')  
        except ValueError:  
            raise ValueError("解密失败,可能是密钥错误或密文被篡改")  
        return decrypted_text  
  
# 使用示例  
if __name__ == "__main__":  
    # 自动生成密钥(或你可以提供一个)  
    key = get_random_bytes(16)  
    cipher = AESCipher(key)  
  
    # 要加密的信息  
    plaintext = "Hello, this is a secret message!"  
    print(f"原文: {plaintext}")  
  
    # 加密  
    ciphertext_hex = cipher.encrypt(plaintext)  
    print(f"密文(十六进制): {ciphertext_hex}")  
  
    # 解密  
    decrypted_text = cipher.decrypt(ciphertext_hex)  
    print(f"解密后的文本: {decrypted_text}")

注意

  1. 在这个例子中,我们使用了CBC模式,它需要一个初始化向量(IV)来确保即使相同的明文块也被加密成不同的密文块。IV不需要保密,但必须与密文一起存储或传输,以便解密时能够重新构造相同的加密环境。
  2. 我们使用了padunpad函数来处理明文,因为AES要求明文长度必须是块大小的整数倍。pad函数会在明文末尾添加必要的填充,而unpad函数则在解密后去除这些填充。
  3. 密钥(key)是加密和解密的关键,必须保密且随机生成。在示例中,我们使用了get_random_bytes函数来生成一个随机的密钥,但在实际应用中,你可能需要从一个安全的密钥管理系统中获取密钥。
  4. 加密后的数据(密文)是二进制数据,因此我们以十六进制字符串的形式打印出来以便于查看。在实际应用中,你可能需要将密文编码为Base64或其他适合传输和存储的格式。
  5. decrypt方法现在接受一个十六进制字符串作为输入,并使用split方法将其拆分为IV和加密数据部分,然后使用unhexlify将它们转换回二进制数据进行解密。
  6. 请注意,由于密钥是随机生成的,并且每次运行程序时都可能不同,因此如果你想要解密之前加密的数据,你需要确保使用相同的密钥。在实际应用中,你应该有一个安全的密钥管理系统来管理密钥的生成、存储和分发。
目录
相关文章
|
2月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
3月前
|
设计模式 缓存 运维
Python装饰器实战场景解析:从原理到应用的10个经典案例
Python装饰器是函数式编程的精华,通过10个实战场景,从日志记录、权限验证到插件系统,全面解析其应用。掌握装饰器,让代码更优雅、灵活,提升开发效率。
283 0
|
5月前
|
前端开发 数据安全/隐私保护 Python
虚拟物流单号生成器, 虚拟快递单号假物流信息, 虚拟快递单号在线生成【python框架】
这个虚拟物流单号生成系统包含以下功能:支持多种主流快递公司的单号生成
|
5月前
|
数据安全/隐私保护 数据格式 Python
快递单号模拟生成器, 虚拟物流信息在线生成,虚假快递单号生成器【python】
支持多种主流快递公司生成符合各快递公司规则的快递单号自动生成收发件人信息
|
5月前
|
JSON 前端开发 API
快递单号生成器在线, 快递单号模拟生成器, 虚拟物流信息在线生成【python】
项目包含三个主要模块:快递单号生成器核心逻辑、Flask Web应用程序和前端HTML页面
|
5月前
|
数据采集 存储 NoSQL
Python爬虫案例:Scrapy+XPath解析当当网网页结构
Python爬虫案例:Scrapy+XPath解析当当网网页结构
|
6月前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
201 1
|
5月前
|
JSON API 数据安全/隐私保护
车辆五项信息查询 API 的实践指南:通过Python调用赋能车辆信息标准化
本API通过车牌号快速获取车辆五项核心信息,包括品牌、登记日期、车架号等,助力二手车评估、维修、保险等场景实现数字化转型。数据源自权威公安交管库,日更同步,毫秒级响应,满足高并发需求,符合隐私保护规范,是推动汽车后市场智能化的重要工具。
334 0
|
6月前
|
数据可视化 算法 数据挖掘
Python 3D数据可视化:7个实用案例助你快速上手
本文介绍了基于 Python Matplotlib 库的七种三维数据可视化技术,涵盖线性绘图、散点图、曲面图、线框图、等高线图、三角剖分及莫比乌斯带建模。通过具体代码示例和输出结果,展示了如何配置三维投影环境并实现复杂数据的空间表示。这些方法广泛应用于科学计算、数据分析与工程领域,帮助揭示多维数据中的空间关系与规律,为深入分析提供技术支持。
255 0
Python 3D数据可视化:7个实用案例助你快速上手
|
10月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
1577 82

推荐镜像

更多