Python数据加密:保障信息安全的最佳实践

更多资料获取

📚 个人网站:ipengtao.com


随着信息技术的发展,数据安全成为越来越重要的议题。在Python中,有多种方法可以用于数据加密,以确保敏感信息在传输和存储过程中不被泄露或篡改。本文将详细介绍Python中数据加密的最佳实践,包括对称加密、非对称加密、哈希算法等多个方面,并提供丰富的示例代码。

1. 对称加密

对称加密使用同一密钥进行加密和解密,是一种高效的加密方式。下面是使用cryptography库进行对称加密的示例:

from cryptography.fernet import Fernet# 生成密钥
key = Fernet.generate_key()
cipher_suite = Fernet(key)# 加密数据
data = b"Hello, this is a secret message."
cipher_text = cipher_suite.encrypt(data)
print(f"Cipher Text: {cipher_text}")# 解密数据
plain_text = cipher_suite.decrypt(cipher_text)
print(f"Plain Text: {plain_text.decode()}")

2. 非对称加密

非对称加密使用一对公钥和私钥进行加密和解密,具有更高的安全性。下面是使用cryptography库进行非对称加密的示例:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa, padding# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048,backend=default_backend()
)public_key = private_key.public_key()# 加密数据
data = b"Hello, this is a secret message."
cipher_text = public_key.encrypt(data,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)
print(f"Cipher Text: {cipher_text}")# 解密数据
plain_text = private_key.decrypt(cipher_text,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)
print(f"Plain Text: {plain_text.decode()}")

3. 哈希算法

哈希算法用于生成数据的固定长度散列值,常用于验证数据完整性。以下是使用Python内置的hashlib库进行哈希的示例:

import hashlib# 计算字符串的MD5哈希值
data = b"Hello, this is a message."
hash_md5 = hashlib.md5(data).hexdigest()
print(f"MD5 Hash: {hash_md5}")# 计算字符串的SHA-256哈希值
hash_sha256 = hashlib.sha256(data).hexdigest()
print(f"SHA-256 Hash: {hash_sha256}")

4. 使用PyCryptodome库

PyCryptodome是一个强大的密码学库,支持对称加密、非对称加密、哈希算法等多种功能。以下是一个综合使用PyCryptodome进行数据加密的示例:

from Crypto.Cipher import AES, PKCS1_OAEP
from Crypto.PublicKey import RSA
from Crypto.Random import get_random_bytes
import base64# 对称加密
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
data = b"Hello, this is a secret message."
cipher_text, tag = cipher.encrypt_and_digest(data)
print(f"Symmetric Cipher Text: {base64.b64encode(cipher_text)}")# 非对称加密
recipient_key = RSA.generate(2048)
cipher_rsa = PKCS1_OAEP.new(recipient_key)
encrypted_data = cipher_rsa.encrypt(data)
print(f"Asymmetric Cipher Text: {base64.b64encode(encrypted_data)}")# 哈希算法
hash_md5 = hashlib.md5(data).hexdigest()
print(f"MD5 Hash: {hash_md5}")hash_sha256 = hashlib.sha256(data).hexdigest()
print(f"SHA-256 Hash: {hash_sha256}")

5. 使用PyCryptodome库进行高级加密操作

PyCryptodome库提供了许多高级的加密操作,如文件加解密、数字签名等。以下是一些示例代码:

5.1 文件加解密

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import os# 生成密钥和初始化向量
key = get_random_bytes(16)
iv = get_random_bytes(16)# 加密文件
cipher = AES.new(key, AES.MODE_CBC, iv)
with open('plain_text.txt', 'rb') as file:plaintext = file.read()ciphertext = cipher.encrypt(plaintext)with open('encrypted_file.bin', 'wb') as file:file.write(iv + ciphertext)# 解密文件
with open('encrypted_file.bin', 'rb') as file:data = file.read()iv = data[:16]cipher = AES.new(key, AES.MODE_CBC, iv)decrypted_data = cipher.decrypt(data[16:])with open('decrypted_file.txt', 'wb') as file:file.write(decrypted_data)

5.2 数字签名

from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA# 生成密钥对
private_key = RSA.generate(2048)
public_key = private_key.publickey()# 签名
data = b"Hello, this is a message."
hash_value = SHA256.new(data)
signature = pkcs1_15.new(private_key).sign(hash_value)# 验证签名
hash_value = SHA256.new(data)
try:pkcs1_15.new(public_key).verify(hash_value, signature)print("Signature is valid.")
except (ValueError, TypeError):print("Signature is invalid.")

6. 数据加密与解密的异常处理

在实际应用中,数据加密与解密过程中可能会出现各种异常情况,如密钥错误、数据损坏等。因此,对异常进行合理处理是保证系统稳定性的关键。

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import unpaddef encrypt_and_decrypt():try:# 生成密钥和初始化向量key = get_random_bytes(16)iv = get_random_bytes(16)# 加密数据cipher = AES.new(key, AES.MODE_CBC, iv)data = b"Hello, this is a secret message."ciphertext = cipher.encrypt(data)# 模拟数据传输和接收过程# 解密数据decrypt_cipher = AES.new(key, AES.MODE_CBC, iv)decrypted_data = unpad(decrypt_cipher.decrypt(ciphertext), AES.block_size)print(f"Original Data: {data}")print(f"Decrypted Data: {decrypted_data.decode()}")except Exception as e:print(f"Error: {e}")encrypt_and_decrypt()

数据加密的最佳实践

  • 选择合适的算法和密钥长度: 根据应用场景选择对称加密、非对称加密或哈希算法,并根据安全需求选择适当的密钥长度。

  • 安全存储密钥: 对称加密和非对称加密的密钥都需要安全存储,以防泄露。

  • 适度复杂化密钥: 密钥过于简单容易受到暴力破解攻击,因此密钥的选择应适度复杂化。

  • 及时更新密钥: 定期更新加密密钥,增加系统的安全性。

  • 使用已验证的库和算法: 使用经过验证的密码学库和算法,避免自行实现加密算法。

数据加密的综合实践

综合使用对称加密、非对称加密、哈希算法、文件加解密、数字签名等技术,可以构建更为安全的数据加密方案。在实际应用中,根据具体场景需求,选择适当的加密方式,并充分考虑异常情况,以确保系统的稳定性和数据的安全性。

总结

本文详细介绍了Python中数据加密的最佳实践,包括对称加密、非对称加密、哈希算法等多个方面。通过丰富的示例代码,读者可以更好地理解和应用这些加密技术,以确保数据在处理过程中的安全性。

在实际应用中,根据具体需求选择合适的加密方式,并遵循最佳实践以确保系统的数据安全。希望本文对大家在数据加密方面的学习和应用提供有益的指导。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/288914.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化---直方图

内容导航 类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统…

基于SpringBoot+Vue的小区物业管理系统

基于SpringBootVue的小区物业管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 房屋类型 论坛 登录界面 管理员界面 员工界面 摘要 小区物业管理系统是一个…

202349读书笔记|《陈年喜的诗》——杏花岁岁结出青杏 岁月是永恒的 善变的是人类的命运

《陈年喜的诗》作者矿工诗人陈年喜,今年还读了一本外卖诗人的《赶时间的人》,也很惊喜。脚下是泥泞的土地,心中是灿烂的繁星。我喜欢生活与生命的厚重烙刻在他们心灵的痕迹,有心酸艰苦,但更多的是对生活的热爱&#xf…

智能优化算法应用:基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.非洲秃鹫算法4.实验参数设定5.算法结果6.…

内外联动——记建行江门鹤山支行营业部成功堵截诈骗

“谢谢,太谢谢你们了!真没想到,现在骗子手段这么高了,冒充我孙儿太像了。要不是你们一直拦着我,差点就把养老钱汇出去了!”近日,在建行江门鹤山支行营业部大厅里,一位老人家肖婆婆对…

第二百一十七回 修改页面导航中遇到的问题

文章目录 1. 问题介绍2. 使用方法3. 代码与分析3.1 示例代码3.2 代码分析4. 内容总结我们在上一章回中介绍了"分享一种更新页面数据的方法"相关的内容,本章回中将介绍修改页面导航中遇到的问题.闲话休提,让我们一起Talk Flutter吧。 1. 问题介绍 我们在页面之间导…

Jackson 注解及配置大全

Jackson JSON 框架中包含了大量的注解来让我们可以干预 Jackson 的 JSON 处理过程, 例如我们可以通过注解指定 java pojo 的某些属性在生成 json 时被忽略。。本文主要介绍如何使用 Jackson 提供的注解。 Jackson注解主要分成三类,一是只在序列化时生效的…

远程多窗口和Screen用法

Termius 远程链接服务器终端时,经常遇到需要开多个窗口,另外还可能涉及到正在运行的程序一旦和服务器链接断开,那么程序也就停止执行了。对于单单只需要多个窗口的问题,建议下载一个Termius这样软件,比多次打开…

RK3568 android11 调试mipi摄像头 gc2093

一,摄像头简介 GC2093是一个高质量的1080P CMOS图像传感器,用于安全相机产品、数码相机产品和手机相机应用程序。包含了一个1920H x 1080V像素阵列、片上10位ADC和图像信号处理器。高性能和低功耗功能的全面集成使GC2093最适合设计,减少了实…

SQL学习笔记+MySQL+SQLyog工具教程

文章目录 1、前言2、SQL基本语言及其操作2.1、CREATE TABLE – 创建表2.2、DROP TABLE – 删除表2.3、INSERT – 插入数据2.4、SELECT – 查询数据2.5、SELECTDISTINCT – 去除重复值后查询数据2.6、SELECTWHERE – 条件过滤2.7、AND & OR – 运算符2.8、ORDER BY – 排序2…

为你自己学laravel - 15 - model的更新和删除

为你自己学laravel。 model的部分。 这一次讲解的是model当中怎么从数据库当中更新数据和删除数据。 先从数据库当中抓出来资料。 当然我们是使用php artisan tinker进入到终端机。 我们的做法是想要将available这个栏位修改成为true。 第一种更新方法 上面我们就是修改了对…

uniapp cli开发和HBuilderX开发

uniapp cli开发和HBuilderX开发 前言 uniapp是一个跨平台的开发框架,可以开发出微信小程序、支付宝小程序、百度小程序、头条小程序、H5、App等,开发者只需要写一套代码,就可以发布到各个平台,大大提高了开发效率。 uniapp的开…