哈希加密Python实现

一、代码

from cryptography.fernet import Fernet
import os
import bcrypt# 密钥管理和对称加密相关
def save_key_to_file(key: bytes, key_path: str):with open(key_path, 'wb') as file:file.write(key)def load_key_from_file(key_path: str) -> bytes:if not os.path.exists(key_path):raise FileNotFoundError(f"密钥文件 {key_path} 不存在")with open(key_path, 'rb') as file:return file.read()def encrypt_data(data: str, key: bytes) -> bytes:fernet = Fernet(key)encrypted_data = fernet.encrypt(data.encode())return encrypted_datadef decrypt_data(encrypted_data: bytes, key: bytes) -> str:fernet = Fernet(key)decrypted_data = fernet.decrypt(encrypted_data).decode()return decrypted_data# 密码哈希相关
def hash_password(password: str) -> str:salt = bcrypt.gensalt()hashed_password = bcrypt.hashpw(password.encode(), salt)return hashed_password.decode('utf-8')def verify_password(password: str, stored_hash: str) -> bool:return bcrypt.checkpw(password.encode(), stored_hash.encode())# 示例数据处理
def main():# 对称加密部分sensitive_data = "mysecretpassword"key_path = 'secret_key.key'# 生成并保存密钥key = Fernet.generate_key()save_key_to_file(key, key_path)# 加载已保存的密钥loaded_key = load_key_from_file(key_path)encrypted_data = encrypt_data(sensitive_data, loaded_key)print("Encrypted data:", encrypted_data)decrypted_data = decrypt_data(encrypted_data, loaded_key)print("Decrypted data:", decrypted_data)# 密码哈希部分password = "mysecretpassword"hashed_password = hash_password(password)print("Hashed password:", hashed_password)is_valid = verify_password(password, hashed_password)print("Password verification:", is_valid)if __name__ == "__main__":main()

二、运行结果:

在这里插入图片描述

三、报错解决

出现 ModuleNotFoundError: No module named ‘bcrypt’ 错误是因为Python环境尚未安装名为bcrypt的库,该库用于密码哈希。要解决这个问题,你需要在你的Python环境中安装bcrypt库。在终端(对于Linux/Mac用户)或命令提示符(对于Windows用户)中执行以下命令:

Shell

pip install bcrypt

如果你使用的是虚拟环境(如venv或conda环境),请确保激活对应的虚拟环境后再运行上述命令。

对于某些系统,可能需要通过特定包管理器或者使用特定的Python版本的pip来安装bcrypt,例如在Ubuntu上可能需要先安装libffi-dev和python3-dev等依赖,然后使用pip3来安装bcrypt:

Shell

sudo apt-get install libffi-dev python3-dev
pip3 install bcrypt

安装完成后,再尝试运行你的Python脚本,bcrypt模块就应该可以正常导入和使用了。

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

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

相关文章

【芯片设计- RTL 数字逻辑设计入门 7 -- 同步复位与异步复位详细介绍】

文章目录 复位的类型和划分同步复位综合后电路优缺点 异步复位优缺点 异步复位的时序分析(recovery time/removal time)异步复位,同步释放综合后电路优缺点 转自:https://blog.csdn.net/qq_40281783/article/details/128969188 复…

docker部署笔记系统flatnotes

效果 安装 创建目录 mkdir -p /opt/flatnotes/data && cd /opt/flatnotes/ chmod -R 777 /opt/flatnotes/ 创建并启动容器(可以自己修改账户和密码) docker run -d \ --restart unless-stopped \ --name flatnotes \ -p "10040:8080" \ -v "/dat…

JavaEE企业级应用软件开发—Spring框架入门学习笔记(一)

一、认识框架 实际开发中,随着业务的发展,软件系统变得越来越复杂,如果所有的软件都从底层功能开始开发,那将是一个漫长而繁琐的过程。此外,团队协作开发时,由于没有统一的调用规范,系统会出现大…

Unity类银河恶魔城学习记录3-4 EnemyBattleState P50

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Enemy.cs using System.Collections; using System.Collections.Generic; …

@ResponseBody

目录 概述 用途 使用案例 用 ResponseBody 设置返回值 概述 ResponseBody注解的作用是将方法返回的对象,通过适当的转换器(HttpMessageConverter)转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据 用…

外汇天眼:欧洲期货交易所(Eurex)推出了基于EURO STOXX 50指数股息期货的中期期权

欧洲期货交易所(Eurex)将于2024年2月5日推出基于EURO STOXX 50指数股息期货的中期期权,扩大了其股息衍生品的产品线。 目前作为场外交易产品的中期期权(Mid-Curve Options)现在可以在Eurex进行交易。 中期期权&#x…

使用 openpyxl 操作 Excel

由于单位有任务,需要按照名册制作多个工作表。手动复制和修改内容太费事了,所以使用python完成此项工作,为之后的此类工作提供一个通用脚本。 安装依赖库 pip install openpyxl lxml我们需要用到openpyxl。在官方文档中提到,如果…

摘录笔记——2024年2月5日

美团三年,总结的10条血泪教训在美团的三年多时光,如同一部悠长的交响曲,高高低低,而今离开已有一段时间。闲暇之余,梳理了三年多的收获与感慨,既是对过去一段时光的的一个深情回眸,也是对未来之…

「牵手」联合国,看这家企业如何推动厕所可持续发展

作者 | 叶蓁 来源 | 洞见新研社 “没有人是一座孤岛,每个人都是广袤大陆的一部分。”英国诗人的这句话,用来形容当下的消费市场再准确不过。 当前,正是国家增强经济活力、发展内生动力的关键时期。2023年,我国全年GDP增速5.2%&…

Linux-3进程概念(一)

1.冯诺伊曼结构 1.1 冯诺依曼结构的概念 冯诺依曼结构,又称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同&…

Django连接Mysql

修改setting.py配置文件 连接前,需要创建数据库 安装mysql客户端 因为连接需要一个客户端,而python没有客户端,所以就需要一个客户端来接收你填写的参数 pip install mysqlclient

【Java程序设计】【C00246】基于Springboot的留守儿童爱心网站(有论文)

基于Springboot的留守儿童爱心网站(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的留守儿童爱心网站 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块:系统首页的主要功能展…

为什么(如何)从 Java 8/11 迁移到 Java 21,从 Spring Boot 2 迁移到最新的 Spring Boot 3.2 ?

介绍 如果您的工作配置与 Java 有一定的关系,您一定已经注意到 了Java 最新稳定版本 Java 21 引起了很多关注。 这个新版本引入了一些未来的功能,改进了之前引入/孵化的一些突破性功能,弃用了多余的功能,并删除了一些错误。它使…

CTF-WEB进阶与学习

PHP弱类型 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较 在进行比较的时候,会先将字符串类型转化成相同,再比较 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值 并且…

c语言游戏实战(3):三子棋

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载: 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而,由于水下环境的复杂性和特殊性,水下目标检测面临着许多挑…

计算机网络——新型网络架构:SDN/NFV

1. 传统节点与SDN节点 1.1 传统节点(Traditional Node) 这幅图展示了传统网络节点的结构。在这种设置中,控制层和数据层是集成在同一个设备内。 以太网交换机:在传统网络中,交换机包括控制层和数据层,它不仅负责数据包的传输&…

编译spring原码

1.下载原码 spring原码下载地址链接: github地址 最好选择一个release版本,毕竟发布版稳定,上述连接指向的是5.2.0 release 2.配置gradle 由于spring源码是用gradle管理的。为了能顺利得下载项目所需的jar包,因此要先配置一下gradle&#xff…

docker安装zpan

安装 1.创建数据库 docker run -di --namezpan_mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD123456 mysql 2.手动新建数据库zpan 3.创建目录 mkdir -p /opt/zpan cd /opt/zpan 4.编写配置文件 vim config.yml #详细配置文档可参考: https://zpan.space/#/zh…