使用Python内置库实现数据的加密与校验

news2024/11/23 11:23:48

更多资料获取

📚 个人网站:ipengtao.com


数据的安全性是现代应用程序中不可忽视的一个重要方面。在Python中,我们可以利用内置的加密和校验库来保护敏感信息。本文将深入讨论如何使用Python内置库实现数据的加密和校验,为开发者提供全方位的数据安全解决方案。

数据加密

hashlib库的应用

Python的hashlib库提供了常见的哈希算法,如MD5、SHA-256等,用于对数据进行散列处理。以下是一个简单的示例:

import hashlib

def hash_data(data):
    hasher = hashlib.sha256()
    hasher.update(data.encode('utf-8'))
    return hasher.hexdigest()

# 使用示例
original_data = "Sensitive Information"
hashed_result = hash_data(original_data)
print(f"Original Data: {original_data}")
print(f"Hashed Result: {hashed_result}")

Fernet库的对称加密

cryptography库中的Fernet模块提供了对称加密算法,简化了加密和解密的过程。以下是一个使用Fernet进行加密和解密的例子:

from cryptography.fernet import Fernet

def encrypt_data(data, key):
    cipher_suite = Fernet(key)
    cipher_text = cipher_suite.encrypt(data.encode('utf-8'))
    return cipher_text

def decrypt_data(cipher_text, key):
    cipher_suite = Fernet(key)
    plain_text = cipher_suite.decrypt(cipher_text).decode('utf-8')
    return plain_text

# 使用示例
key = Fernet.generate_key()
original_data = "Sensitive Information"
encrypted_result = encrypt_data(original_data, key)
decrypted_result = decrypt_data(encrypted_result, key)

print(f"Original Data: {original_data}")
print(f"Encrypted Result: {encrypted_result}")
print(f"Decrypted Result: {decrypted_result}")

数据校验

hmac库的应用

hmac库可用于生成带密钥的哈希值,用于数据校验。以下是一个使用hmac库的简单示例:

import hmac
import hashlib

def generate_hmac(data, key):
    hmac_digest = hmac.new(key.encode('utf-8'), data.encode('utf-8'), hashlib.sha256).hexdigest()
    return hmac_digest

# 使用示例
secret_key = "SecretKey"
message = "Hello, Data!"
generated_hmac = generate_hmac(message, secret_key)

print(f"Message: {message}")
print(f"Generated HMAC: {generated_hmac}")

数据加密与校验的综合应用

在真实场景中,我们通常需要综合应用加密和校验来确保数据的完整性和安全性。以下是一个结合使用Fernethmac的例子:

from cryptography.fernet import Fernet
import hmac
import hashlib

def encrypt_and_sign(data, encryption_key, signing_key):
    # 加密数据
    cipher_suite = Fernet(encryption_key)
    encrypted_data = cipher_suite.encrypt(data.encode('utf-8'))

    # 生成数据签名
    data_signature = hmac.new(signing_key.encode('utf-8'), encrypted_data, hashlib.sha256).hexdigest()

    return encrypted_data, data_signature

def verify_and_decrypt(encrypted_data, data_signature, encryption_key, signing_key):
    # 验证数据签名
    expected_signature = hmac.new(signing_key.encode('utf-8'), encrypted_data, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(expected_signature, data_signature):
        raise ValueError("Data signature verification failed.")

    # 解密数据
    cipher_suite = Fernet(encryption_key)
    decrypted_data = cipher_suite.decrypt(encrypted_data).decode('utf-8')

    return decrypted_data

# 使用示例
encryption_key = Fernet.generate_key()
signing_key = "SecretSigningKey"
original_data = "Sensitive Information"

encrypted_result, data_signature = encrypt_and_sign(original_data, encryption_key, signing_key)
decrypted_result = verify_and_decrypt(encrypted_result, data_signature, encryption_key, signing_key)

print(f"Original Data: {original_data}")
print(f"Encrypted Result: {encrypted_result}")
print(f"Data Signature: {data_signature}")
print(f"Decrypted Result: {decrypted_result}")

通过综合应用加密和校验,确保了数据在传输过程中的保密性和完整性。密钥的管理和安全存储也是关键,开发者需要谨慎处理密钥以防泄露。

这个例子展示了如何使用Fernet进行加密和解密,同时使用hmac生成和验证数据签名,构建了一个更为完整的数据安全方案。在实际应用中,根据具体需求和安全标准,选择适当的加密算法和校验手段,以确保数据得到充分的保护。

密钥的安全管理

在数据加密和校验中,密钥的安全管理至关重要。以下是一些常见的密钥管理最佳实践:

  1. 密钥生成与存储: 使用安全的随机数生成器生成密钥,并妥善存储密钥。密钥不应明文硬编码在代码中,而是应存储在安全的配置文件或密钥管理服务中。

  2. 密钥轮换: 定期轮换密钥,以减少潜在泄露的风险。定期更新密钥可确保即使密钥泄露,也仅影响到上一个周期的数据。

  3. 访问控制: 限制密钥的访问权限,确保只有授权的人员可以访问和使用密钥。这可以通过访问控制列表(ACL)或密钥管理服务来实现。

  4. 密钥传输安全性: 当需要在不同系统之间传输密钥时,使用安全的通信通道(如HTTPS)以防止中间人攻击。避免在不安全的网络上明文传输密钥。

  5. 监控与审计: 实施监控机制来检测潜在的密钥泄露或不正常的密钥使用行为。定期审计密钥的使用情况,确保其符合预期。

  6. 密钥销毁: 在不再需要使用的密钥时,及时销毁它们。确保已经备份或存档的密钥在销毁过程中也受到保护。

总结

在本篇文章中,我们分享了使用Python内置库实现数据的加密和校验的方法。首先,介绍了cryptography库中的Fernet对称加密算法,展示了如何使用它进行数据的加密和解密。随后,引入了hmac库,通过哈希消息认证码实现了数据的校验,以确保数据的完整性。

在实际应用场景中,不仅可以单独使用加密或校验,更可以将它们结合起来,构建一个更为完整的数据安全方案。通过综合应用Fernethmac,确保了数据在传输过程中的保密性和完整性,同时强调了密钥的安全管理的重要性。密钥的生成、存储、轮换、访问控制等方面的最佳实践对于构建安全的数据加密和校验系统至关重要。在整个过程中,开发者需要保持警惕,确保密钥的安全性,并通过监控与审计等手段及时发现潜在的风险。

综上所述,本文为大家提供使用Python实现数据加密和校验的全面指南,帮助开发者构建更安全的数据处理流程。在实践中,根据具体需求和安全标准选择适当的加密算法和校验手段,将数据的安全性置于首要考虑之中。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java实验:数据库应用(idea+mysql+php)设计用户注册和登录

设计用户注册和登录界面,实现用户注册和登录操作。 设计用户注册/登录界面;使用工具在MySQL中创建user表,包括学号、姓名、密码、专业、班级;实现注册操作:在user表中插入一条新纪录,但学号不能重复;实现登…

通用plantuml 时序图(Sequence Diagram)模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …

群晖Docker搭建HomeAssistant,结合内网穿透实现远程访问智能家居控制中心

使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使用群晖Docker搭建HomeAssistant并实现异地公网访问一、下载HomeAssistant镜像二、内网穿透HomeAssistant,实现异地控制智能家居三、使用固定域名访问HomeAssistant HomeAssistant是一个可以控制 苹果…

Redis部署-集群

目录 集群 数据分片算法 哈希求余 一致性哈希算法 哈希槽分区算法 redis集群搭建 1.创建目录和配置. 2.将上述redis节点.构建成集群 3.使用客户端连接集群 集群模式下的故障转移流程 1.故障判定 2.故障迁移 集群扩容 集群 广义上的集群,只要是多个机器,构成了分布…

HarmonyOS架构及关键技术整理

技术解析:鸿蒙系统的底层优势 鸿蒙系统采用了先进的微内核设计,这是一种全新的系统架构,能够更好地适应现代智能设备的多样性和互联性。微内核通过最小化系统的核心功能,提高了系统的安全性和可定制性。此外,鸿蒙系统…

Day51力扣打卡

打卡记录 Plus and Multiply(模拟) 链接 要满足 a x b ∗ y n a^x b * y n axb∗yn 的关系,可以枚举满足 b ∗ y n − a x b * y n - a ^ x b∗yn−ax 的可余条件。 t int(input()) for _ in range(t):n, a, b map(int, input().…

Demystifying DeFi MEV Activities in Flashbots Bundle

目录 笔记后续的研究方向摘要引言贡献 Demystifying DeFi MEV Activities in Flashbots Bundle CCS 2023 笔记 本文介绍了对 Flashbots 捆绑包中的去中心化金融 (DeFi) 矿工可提取价值 (MEV) 活动的研究。作者开发了ActLifter&am…

无效的源发行版:18

启动项目出现报错:无效的源发行版:18 大概率是项目的jdk版本不一致造成的 我的项目是Gradle构建,主要检查这几方面 ①Gradle配置的JVM ②build.gradle文件的java版本 sourceCompatibility : 编译Java文件的jdk版本,涉及到具体…

【WPF.NET开发】创建简单WPF应用

本文内容 先决条件什么是 WPF?配置 IDE创建项目设计用户界面 (UI)调试并测试应用程序 通过本文你将熟悉在使用 Visual Studio 开发应用程序时可使用的许多工具、对话框和设计器。 你将创建“Hello, World”应用程序、设计 UI、添加代码并调试错误。在此期间&#…

车联网架构设计(二)_消息缓存

在上一篇博客车联网架构设计(一)_消息平台的搭建-CSDN博客中,我介绍了车联网平台需要实现的一些功能,并介绍了如何用EMQXHAPROXY来搭建一个MQTT消息平台。车联网平台的应用需要消费车辆发布的消息,同时也会下发消息给车辆,以实现车…

【Hive】——数据仓库

1.1 数仓概念 数据仓库(data warehouse):是一个用于存储,分析,报告的数据系统 目的:是构建面向分析的集成化数据环境,分析结果为企业提供决策支持 特点: 数据仓库本身不产生任何数据…

robotFramwork 中如何禁用或跳过其中某个 testcase

在 Robot Framework 中,你可以通过添加一个特殊的标签(tag)来禁用某个测试用例。这个标签是 robot:skip。 robotframework *** Settings *** Test Setup Open Application*** Test Cases *** My Test Case[Tags] robot:skipDo Some…

Linux 环境下,jdbc连接mysql问题

1. 下载MySQL的JDBC驱动: 从MySQL官网下载最新的MySQL Connector/J,并将其解压到某个目录,比如/usr/local/mysql/。 2. 将JDBC驱动添加到类路径: 将JDBC驱动添加到类路径,可以使用以下命令: export CLA…

分布式系统硬件资源池原理和接入实践

一、硬件资源池理念产生背景 随着智能设备的发展和普及,越来越多的智能设备已经深入人们的生活,比如手机,PC,平板,各类穿戴设备等。当前单个设备的外设资源已经非常丰富,硬件能力也很强大。像我们的手机、…

什么是数字化工厂?

数字化工厂通常需要资金和技术支持,对大企业来说更容易投入建设。 中小企业难道就毫无机会了吗? 当然不是。中小企业也能够实现数字化工厂,只是可能需要采取不同的策略。虽然中小企业可能面临资源有限的挑战,但通过渐进式的方式和…

win10与 vm虚拟机win7共享文件夹创建

1:在win10(主机)电脑先随意共享一个文件夹 2:在win10(主机)上创建一个网络映射 右键此电脑选择映射网络驱动器 成功后会多出这个网络位置 3:win7虚拟机设置 在虚拟机中点击计算机右键添加一个网络位置

11月榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年11月飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的B站U…

《WebGIS快速开发教程》第5版“惊喜”更新啦

我的书籍《WebGIS快速开发教程》第5版,经过忙碌的编写,终于发布啦! 先给大家看看新书的封面: 这次的封面我们经过了全新的设计,不同于以往的任何一个版本。从封面就可以看出第5版肯定有不小的更新。 那么我们话不多说…

【musl-pwn】msul-pwn 刷题记录 -- musl libc 1.2.2

前言 本文不分析 musl libc 相关源码,仅仅为刷题记录,请读者自行学习相关知识(看看源码就行了,代码量也不大) starCTF2022_babynote 保护:保护全开 程序与漏洞分析: 程序实现了一个菜单堆&…