python应用之内置hashlib库的哈希算法介绍

liftword3周前 (04-09)技术文章2

hashlib 是 Python 的一个内置模块,提供了像 SHA1, SHA256, MD5 等哈希算法。可以接受任意长度的字节数据作为输入,并输出一个固定长度的“哈希值”,通常用于校验数据的完整性。而且该算法是不可逆的,不能通过哈希值反算出原始数据。

使用 hashlib

要使用 hashlib 模块,直接导入它即可。然后通过new方法或者sha256方法等创建一个哈希对象,通过调用该对象的update() 方法来提供要哈希的数据(update方法支持分批提供数据),最后通过调用 hexdigest() 方法来获取十六进制格式的哈希值字符串,或者digest方法获取字节串

常用方法介绍

  • new(name,data=b’’)方法:创建一个hash算法对象,name传入的是算法的名字,比如下面中的算法名字,data传入的是原始字节数据,可以默认为空。

('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512','blake2b', 'blake2s',
'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'shake_128', 'shake_256')

  • 算法名字对应的方法:比如sha256(),md5()等,功能同new方法,可传入字节bytes,字节数组bytearray和内存视图对象memoryview。
  • update(data)方法:向哈希对象中添加数据(字节数据)。可以多次调用此方法,每次调用都会将提供的数据添加到当前哈希计算中。多次调用 update() 方法等同于一次性调用 update() 并传入所有数据的计算结果。
  • digest():返回当前哈希对象计算得到的哈希值,结果为字节串(bytes)。
  • hexdigest():与 digest() 方法类似,返回的是十六进制格式的哈希值字符串,而不是字节串。
  • copy()方法:返回当前哈希对象的一个浅拷贝。通过复制哈希对象并继续在其上调用 update() 方法,可以避免重复计算初始字符串的哈希值。

示例:使用 SHA-256 算法得到哈希值

import hashlib
#字符串
message = "Hello, world!"

# 创建一个SHA256对象
hash_ins = hashlib.sha256()
#new方法和sha256方法类似,大家都可使用
#hash_object = hashlib.new('sha256')

# 提供字节数据
hash_ins.update(message.encode())

# 获取散列值的十六进制表示
print(f"SHA-256 哈希值: {hash_ins.hexdigest()}")

结果:

SHA-256 哈希值: 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3

示例:校验文件的完整性。

定义一个文件,通过open函数打开文件对象,通过read/readline/readlines函数等得到文件内容,通过update方法计算全部文件内容的哈希值。

file = 'config.txt' #文件内容随意填充
with open(file,'rb') as f:
	hash_ins = hashlib.sha256 ()
	while True:
		#每次读取100字节
		content = f.read(100)
		if content:
			hash_ins.update(content)
		else:
			#当文件读取完毕后,打印最后的哈希值
			print(hash_ins.hexdigest())
			break

执行后结果:

f07bd7a28481e1bcf378e673bbe5d03b7f8e5bb5cdc7589e32a8a615dfdc2b20

当我们将文件内容更改一个字符后,我们重新执行,结果变成如下:

1cc02b69147493934d0c94c018ab72cca50744188e23f00bf5155c8fe4f2b1d5

由此可以判定,文件内容已被更新,达到校验文件完整性的目的。

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,点个赞和关注吧,谢谢大家。

相关文章

了解 Python 最常见的内置函数

Python 的内置函数基础Python 的内置函数是该语言不可或缺的一部分,无需额外的库即可提供基本功能。这些函数始终可用,无需导入任何模块即可使用。它们是在 C for CPython(标准 Py...

8-Python内置函数

Python 提供了丰富的内置函数,这些函数可以直接使用而无需导入任何模块。以下是一些常用的内置函数及其示例:1-print()1-1-说明输出指定的信息到控制台。1-2-例子2-len()2-1-说...

Python用内置模块来构建REST服务、RPC服务

1写在前面和小伙伴们分享一些Python 网络编程的一些笔记,博文为《Python Cookbook》读书后笔记整理博文涉及内容包括: TCP/UDP服务构建 不使用框架创建一个REST风格的HTTP...

一文掌握Python 内置数据结构

列表Python 没有数组数据结构(大小固定),相反,它有一个列表数据结构,它是一个动态数组,可以存储混合数据类型的值。与传统数组相比,它具有优势,例如不必指定大小和混合数据类型。当创建列表时,内部会...

这就是Python 模块

1. 模块简介1.1 什么是模块编写较长程序时,建议用文本编辑器代替解释器,执行文件中的输入内容,这就是编写 脚本 。随着程序越来越长,为了方便维护,最好把脚本拆分成多个文件。编写脚本还一个好处,不同...

Python常用的内置函数介绍

Python提供了许多内置函数,这些函数可以直接使用而无需导入任何模块。下面是一些常用的Python内置函数的介绍:1. `print()`用于将指定的内容输出到控制台。可以打印文本、变量、表达式等。...