0

0

Python中hashlib的作用 加密哈希模块hashlib的常用算法实现

冰火之心

冰火之心

发布时间:2025-06-08 23:45:08

|

593人浏览过

|

来源于php中文网

原创

hashlib 是 python 中用于生成数据哈希值的标准库模块,主要作用是通过哈希算法将任意长度的数据转换为固定长度的摘要信息,常用于数据完整性校验和密码存储。1. hashlib 常用的哈希算法包括 md5、sha-1、sha-2(如 sha-256、sha-512)和 sha-3 等,其中 sha-256 输出 256 位,广泛用于安全场景;2. 生成哈希值的基本流程是导入模块并选择算法、初始化哈希对象、更新字节类型的数据、获取摘要结果,例如使用 hashlib.sha256() 和 .hexdigest() 方法;3. 加盐哈希通过加入随机生成的“盐”增强密码安全性,常用方法是 hashlib.pbkdf2_hmac(),结合盐值和迭代次数提高破解难度;4. 使用时应注意避免使用 md5 或 sha-1 存储密码,确保输入为字节类型,支持分段更新数据,并根据不同用途选择合适算法,如密码相关推荐使用 pbkdf2_hmac、bcrypt 或 scrypt,通用哈希则推荐 sha-256。

在Python中,hashlib 是一个用于生成数据哈希值的标准库模块。它的主要作用是将任意长度的数据(比如字符串、文件内容等)通过特定的哈希算法转换成固定长度的摘要信息。这个过程通常是不可逆的,常用于数据完整性校验、密码存储等场景。

下面介绍几个 hashlib 中常用的哈希算法及其使用方法。


1. hashlib常用哈希算法有哪些?

Python 的 hashlib 支持多种哈希算法,包括但不限于:

  • MD5
  • SHA-1
  • SHA-2(如 SHA-256、SHA-512)
  • SHA-3 等

这些算法的主要区别在于输出长度和安全性。例如:

立即学习Python免费学习笔记(深入)”;

  • MD5 输出128位(16字节),但已不推荐用于安全用途,容易被破解。
  • SHA-256 输出256位(32字节),目前广泛用于安全场景,如区块链、证书签名等。

你可以在代码中通过如下方式查看当前系统支持的哈希算法:

import hashlib
print(hashlib.algorithms_available)

2. 如何用hashlib生成哈希值?

使用 hashlib 生成哈希值的基本流程如下:

  1. 导入模块并选择算法
  2. 初始化哈希对象
  3. 更新数据(注意:必须是字节类型)
  4. 获取十六进制或二进制形式的摘要

以 SHA-256 为例:

import hashlib

data = "hello world".encode('utf-8')
sha256_hash = hashlib.sha256()
sha256_hash.update(data)
digest = sha256_hash.hexdigest()
print(digest)

几点注意事项:

Khroma
Khroma

AI调色盘生成工具

下载
  • 数据必须是字节类型(bytes),如果是字符串需要先编码
  • 可以多次调用 .update() 方法拼接数据,适合处理大文件
  • .hexdigest() 返回的是十六进制字符串,方便展示;.digest() 返回原始字节

3. 加盐哈希与密码存储安全

虽然哈希本身是不可逆的,但直接对密码进行哈希仍然存在风险,因为攻击者可以通过彩虹表反推常见密码。为增强安全性,通常会加入“盐”(salt)——一段随机生成的数据。

一个简单的加盐示例:

import hashlib
import os

password = "mysecretpassword"
salt = os.urandom(16)  # 生成16字节的随机盐值
hashed = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)
print(hashed.hex())

说明:

  • 使用了 pbkdf2_hmac 方法,这是专门用于密码哈希的函数
  • 参数 'sha256' 表示使用的哈希算法
  • 第三个参数是盐值,每次注册时应随机生成
  • 第四个参数是迭代次数,越大越安全,但也更耗时

这种方式比直接使用 .sha256() 更适合密码存储。


4. 常见误区和注意事项

在实际使用 hashlib 时,有些细节容易被忽略:

  • 不要用MD5或SHA-1做密码哈希:它们计算速度快,容易被暴力破解。
  • 确保输入数据是字节类型:字符串要先 .encode(),否则会报错。
  • 更新数据可以分段进行:比如读取大文件时可以按块更新。
  • 不同平台支持的算法可能不同:某些算法(如 SHA-3)依赖底层 OpenSSL 版本。

如果你不确定该选哪种算法,记住一句话:密码相关就用 pbkdf2_hmac、bcrypt 或 scrypt,通用哈希推荐 SHA-256。


基本上就这些。掌握这几个常用算法和使用技巧,就能满足大多数哈希需求了。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

761

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1570

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1205

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

193

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

131

2025.08.07

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号