哈希加密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_data

def 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模块就应该可以正常导入和使用了。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值