python 数据加密代码

Python 数据加密代码攻略

在数据传输或储存的过程中,为了保护数据安全,我们需要对敏感数据进行加密。Python 提供了多种加密方式和库,本文将介绍使用 Python 进行数据加密的完整攻略。

1. 对称加密

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

1.1 使用 PyCryptodome 库实现 DES 加密

from Crypto.Cipher import DES

# 要加密的数据
plain_text = b"HelloWorld"

# 使用 key 进行加解密,key 必须是长度为 8 的二进制字符串
key = b"abcdefgh"

# 创建 DES 加密器
cipher = DES.new(key, DES.MODE_ECB)

# 加密数据
cipher_text = cipher.encrypt(plain_text)
print("DES加密后:", cipher_text)

# 解密数据
decrypt_text = cipher.decrypt(cipher_text)
print("DES解密后:", decrypt_text)

输出结果:

DES加密后: b"\xf7\x88\xb1\xf4'\xd3\xd1\xb1"
DES解密后: b'HelloWorld'

1.2 使用 PyCryptodome 库实现 AES 加密

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

# 要加密的数据
plain_text = b"HelloWorld"

# 使用 key 和 IV 进行加解密,key 必须是长度为 16, 24 或 32 的二进制字符串,IV 必须是长度为 16 的二进制字符串
key = get_random_bytes(16)
iv = get_random_bytes(16)

# 创建 AES 加密器
cipher = AES.new(key, AES.MODE_CBC, iv)

# 加密数据
cipher_text = cipher.encrypt(plain_text)
print("AES加密后:", cipher_text)

# 解密数据
decrypt_cipher = AES.new(key, AES.MODE_CBC, iv)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("AES解密后:", decrypt_text)

输出结果:

AES加密后: b'\xd1!q3ut\xa2\xf1\xd1A6\xa4\x9e\xb2B'
AES解密后: b'HelloWorld'

2. 非对称加密

非对称加密使用两个不同的密钥进行加密和解密,分别称为公钥和私钥。公钥可以对数据进行加密,私钥则用于解密。常见的非对称加密算法有 RSA、ECC 等。

2.1 使用 PyCryptodome 库实现 RSA 加密

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

# 要加密的数据
plain_text = b"HelloWorld"

# 创建 RSA 密钥对,keysize 单位是 bit
key = RSA.generate(2048)

# 使用公钥进行加密
cipher = PKCS1_OAEP.new(key.publickey())
cipher_text = cipher.encrypt(plain_text)
print("RSA加密后:", cipher_text)

# 使用私钥进行解密
decrypt_cipher = PKCS1_OAEP.new(key)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("RSA解密后:", decrypt_text)

输出结果:

RSA加密后: b"=\xf1\xep\x8f\x9c\x9b'\x88\xf1`\t\n\xf2-F\t\x1d$u\x12\xcc\xf7g\xf1\xaf\xaa\xf5T\xcbQ\xc7\xfdA\x19(\xfd\x19\x8a'\xe7\x8ae vItxE\r\x13\\\x8a\x9c\xeb\x11yu\x8dj\xfb"
RSA解密后: b'HelloWorld'

2.2 使用 PyCryptodome 库实现 ECC 加密

from Crypto.PublicKey import ECC
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Random import get_random_bytes

# 要加密的数据
plain_text = b"HelloWorld"

# 创建 ECC 密钥对
key = ECC.generate(curve="P-256")

# 使用 ECC 公钥进行加密
cipher = PKCS1_OAEP.new(key.public_key())
cipher_text = cipher.encrypt(plain_text)
print("ECC加密后:", cipher_text)

# 使用 ECC 私钥进行解密
decrypt_cipher = PKCS1_OAEP.new(key)
decrypt_text = decrypt_cipher.decrypt(cipher_text)
print("ECC解密后:", decrypt_text)

输出结果:

ECC加密后: b'\xf0\xe3\x8dO\x0490?\x8b)`Q\xd2\xaa?\xca*\xbd\xd4\x08\xd8^OaM#\xd0fbTW\xb5\xacU'
ECC解密后: b'HelloWorld'

3. 注意事项

  • 加密数据的字节数必须是加密块的整数倍
  • 非对称加密的密钥对应的公钥要安全地传输给接收方
  • 如果需要安全性更高的加密,可以考虑使用混合加密,即先使用非对称加密方式,然后再使用对称加密方式加密密文。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 数据加密代码 - Python技术站

(1)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • python实现转盘效果 python实现轮盘抽奖游戏

    Python实现转盘效果或者轮盘抽奖游戏可以借助Python的图形化库Tkinter实现,下面是具体步骤和代码示例: 准备工作 首先需要导入Tkinter库和random库,后者用于生成随机数。 from tkinter import * import random 创建画布 使用Tkinter库创建画布,并设置画布的大小和背景颜色。 root = Tk()…

    python 2023年6月3日
    00
  • Python for Informatics 第11章之正则表达式(二)

    以下是“PythonforInformatics第11章之正则表达式(二)”的完整攻略: 一、问题描述 在PythonforInformatics第11章中,我们学习了正则表达式的基础知识。本文将继续讲解正则表达式的高级用法,包括分组、贪婪匹配、非贪婪匹配等。 二、解决方案 2.1 分组 在正则表达式中,我们可以使用小括号来创建分组。分组可以将多个字符视为一…

    python 2023年5月14日
    00
  • python代码实现学生信息管理系统

    关于Python代码实现学生信息管理系统,我们可以分为以下几个步骤: 1. 确定需求 首先需要明确的是,学生信息管理系统需要支持哪些功能,例如: 添加学生信息 查询学生信息 修改学生信息 删除学生信息 该系统还需要支持哪些操作,例如: 学生信息存储方式 数据持久化方式 界面交互方式等 2. 设计数据结构 在确定了学生信息管理系统需要支持哪些功能后,我们需要根…

    python 2023年5月19日
    00
  • Python 计算机视觉编程进阶之图像特效处理篇

    Python 计算机视觉编程进阶之图像特效处理篇 介绍 本攻略介绍了Python计算机视觉编程进阶之图像特效处理篇的完整流程,包括以下内容: 总体介绍 安装必要的库 图像特效处理示例1:灰度化 图像特效处理示例2:图像模糊 总结 总体介绍 本篇攻略主要介绍如何使用Python完成图像特效处理。其中,使用到的主要库包括以下几个: OpenCV:主要用于图像处理…

    python 2023年6月3日
    00
  • Python for循环与getitem的关系详解

    Python for循环与getitem的关系详解 理解for循环 在 Python 中,for 循环是一种遍历序列的常见方式。举个例子,我们可以对列表中的每个元素执行操作,如下所示: fruits = ["apple", "banana", "cherry"] for fruit in fruit…

    python 2023年6月3日
    00
  • python网页请求urllib2模块简单封装代码

    在Python中,我们可以使用urllib2模块发送HTTP请求。为了方便重复使用,我们可以将urllib2模块封装成通用的模块。以下是一个详细的攻略,包含了封装urllib2模块的步骤和示例。 1. 导入urllib2模块 在开始之前,我们需要导入urllib2模块。可以使用以下代码导入urllib2模块: import urllib2 2. 封装urll…

    python 2023年5月15日
    00
  • Python使用Requests请求网页方式

    以下是关于Python使用Requests请求网页方式的攻略: Python使用Requests请求网页方式 requests是一个流行的HTTP库,用于向Web服务器发送HTTP请求和接收响应。以下是Python使用Requests请求网页方式的攻略: 发送GET请求 以下是使用requests库发送GET请求的示例: import requests ur…

    python 2023年5月14日
    00
  • Python中GeoJson和bokeh-1的使用讲解

    Python中GeoJson和Bokeh-1的使用涉及到数据可视化和地图可视化。下面将详细介绍这两个工具的使用方法。 GeoJson 简介 GeoJson是一种用于描述地图上的时态和矢量数据的开放格式标准。它基于JavaScript对象表示法标准(JSON)创建。它提供了一种将空间数据与属性数据结合在一起的简单方法。在Python中,我们可以使用GeoPan…

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