无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(hashlib) Python算法模块之hashlib模块详解 Python hashlib 模块 消息摘要和加盐哈希 全网首发(图文详解1)

前沿技术 Micheal 6个月前 (06-11) 84次浏览 已收录 扫描二维码

(hashlib) Python算法模块之hashlib模块详解

hashlib模块是Python中一个提供了常见的消息摘要(哈希)算法的标准库模块,如MD5, SHA1, SHA224, SHA256, SHA384, 和SHA512等。消息摘要可以确保数据的完整性,非常适用于密码学中产生安全的散列。以下是如何使用hashlib模块的基本步骤:

基本使用:

  • 导入hashlib模块。
  • 选择一个哈希算法(例如:md5(), sha256())。
  • 创建哈希对象。
  • 向哈希对象提供要加密的数据(可以是bytes类型的数据)。
  • 调用hexdigest()方法获取哈希值的16进制表示形式。

示例代码:

import hashlib

# 选择算法创建哈希对象, 这里以sha256为例
hash_object = hashlib.sha256()

# 准备需要加密的数据,必须是bytes类型,所以如果是字符串需要编码
data = "Hello, World!".encode()

# 提供数据,可以多次调用update方法添加数据
hash_object.update(data)

# 获取16进制格式的摘要
hash_digest = hash_object.hexdigest()

print(f"SHA256 Hash: {hash_digest}")

处理大文件:

对于大型文件,不应该一次性读取整个文件,这样会消耗大量内存。应当分块读取文件内容并逐步更新hash:

import hashlib

def hash_file(filename):
    h = hashlib.sha256()

    with open(filename, 'rb') as file:
        # 对文件分块进行处理
        chunk = 0
        while chunk != b'':  # 读到文件末尾时,chunk为b''
            chunk = file.read(1024)  # 一次读取1024字节
            h.update(chunk)

    return h.hexdigest()

# 使用函数处理文件
filename = "path_to_your_large_file"
print(f"The SHA256 hash of the file is: {hash_file(filename)}")

加盐哈希(用于密码存储):

为了增加哈希的复杂性,通常会对要哈希的数据添加额外的随机数据,即“盐”(salt)。

import hashlib
import os

def hash_password(password, salt=None):
    if salt is None:
        # 生成随机盐
        salt = os.urandom(16)

    # 将密码和盐组合
    pwd_salt = password.encode('utf-8') + salt

    # 创建哈希对象并提供数据
    h = hashlib.sha256(pwd_salt)
    hash_of_password = h.hexdigest()

    return hash_of_password, salt

# 使用函数来获取哈希值和盐
password = "mypass123"
hashed_password, salt = hash_password(password)

print(f"Hashed Password: {hashed_password}")
print(f"Salt: {salt.hex()}")  # 将盐以16进制字符串的格式打印出来

结论:

使用hashlib模块可以非常方便地对字符串进行哈希,并且可以大致确保数据的安全性。但需要注意的是,由于某些算法如MD5、SHA1现在已被认为是不够安全的,所以在考虑安全性时建议使用SHA256或者其他更新更安全的哈希算法。此外,在存储用户密码时,应当使用加盐哈希,并且考虑使用专门的密码哈希函数如bcrypt
(getphonenumber) 微信小程序用户授权获取手机号(getPhoneNumber) 微信小程序用户授权获取手机号主要原理 全网首发(图文详解1)
(java18下载) JDK18 (Java SE Development Kit 18) for Mac v18.0.2 x64 官方苹果电脑版 Oracle JDK18 安装指南 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝