当前位置: 首页 > news >正文

hashlib 模块学习

hashlib 是 Python 标准库中用于散列和摘要算法的模块。散列算法将输入数据转换为固定长度的散列值(也称为摘要),并且对于相同的输入始终生成相同的散列值。这对于存储密码、数字签名、数据完整性验证等领域非常有用。以下是对 hashlib 模块的详细介绍:

常用方法和功能:

  1. 支持的算法: hashlib 模块支持多种散列算法,包括 MD5、SHA-1、SHA-256、SHA-512 等。你可以使用 hashlib.algorithms_guaranteed 属性来获取当前环境下支持的算法列表。

  2. 创建散列对象: 要使用散列算法,首先需要创建一个散列对象。可以通过调用 hashlib.new(algorithm) 来创建一个散列对象,其中 algorithm 是所选的算法名称(如 'md5''sha256' 等)。

  3. 更新散列对象: 通过使用散列对象的 update(data) 方法,可以将数据添加到散列中。这允许你分块处理大量数据,而不需要一次性加载所有数据。

  4. 获取摘要: 使用散列对象的 digest() 方法,可以获取散列值的字节表示。也可以使用 hexdigest() 方法获得十六进制表示的散列值。

  5. 更新和获取摘要的一体化: 使用 hashlib 模块的一些算法,如 SHA-256,你也可以在一个步骤中完成更新和获取摘要,通过 hashlib.sha256(data).hexdigest()

示例:

以下是使用 hashlib 模块计算 SHA-256 散列的示例:

import hashlib# 创建散列对象
hash_object = hashlib.sha256()# 更新散列对象
data = b"Hello, world!"  # 注意要使用字节字符串
hash_object.update(data)# 获取十六进制表示的摘要
hash_digest = hash_object.hexdigest()
print("SHA-256 Hash:", hash_digest)

注意事项:

  • 尽管 hashlib 提供了方便的散列计算方法,但并不适合作为密码散列函数。对于密码散列,应该使用更复杂和安全的算法,如 bcrypt。
  • MD5 和 SHA-1 等算法已被证明不再安全,不应该在安全敏感的场景中使用。
  • 在使用散列算法时,理解算法的用途和性能特性非常重要。选择适当的算法要根据具体的需求和安全考虑。

总而言之,hashlib 模块为 Python 提供了处理散列算法的工具,可以用于生成数据的散列值,用于数据完整性验证等用途。

import hashlibdef hash_phone_number(phone_number):# 创建 SHA-256 散列对象hash_object = hashlib.sha256()# 更新散列对象phone_number_bytes = phone_number.encode('utf-8')  # 将电话号码转换为字节hash_object.update(phone_number_bytes)# 获取十六进制表示的摘要hash_digest = hash_object.hexdigest()return hash_digest# 要加密的电话号码
phone_number = "158****2616"# 调用函数生成摘要并输出
hashed_phone = hash_phone_number(phone_number)
print("Hashed phone number:", hashed_phone)

函数 hash_phone_number 使用 SHA-256 哈希算法对给定的电话号码进行摘要生成。以下是对这个函数的详细总结:

函数名称: hash_phone_number

功能: 该函数接受一个电话号码作为输入,使用 SHA-256 哈希算法生成该电话号码的摘要(哈希值),以实现数据的不可逆性和隐私保护。

参数:

  • phone_number(字符串):要进行哈希处理的电话号码。

返回值:

  • hash_digest(字符串):生成的电话号码的 SHA-256 哈希摘要,以十六进制字符串的形式表示。

使用方法:
要使用这个函数,只需提供一个电话号码作为参数,然后函数将生成对该电话号码的 SHA-256 哈希摘要。这个函数返回的摘要是不可逆的,无法从摘要还原出原始电话号码。

示例:

phone_number = "158****2616"
hashed_phone = hash_phone_number(phone_number)
print("Hashed phone number:", hashed_phone)

注意事项:

  • 哈希函数是不可逆的,这意味着无法从摘要还原出原始数据。
  • 尽管哈希提供了隐私保护,但并不是加密。哈希不同于加密,因为无法解密摘要以获得原始数据。
  • 虽然哈希函数提供了数据摘要和完整性验证的功能,但并不适用于密码散列,因为哈希值不具备密码学安全性。

总而言之,hash_phone_number 函数是一个简单的示例,演示了如何使用 SHA-256 哈希算法生成电话号码的摘要。在实际应用中,哈希通常用于数据摘要和完整性验证,但在处理敏感信息时,还需要考虑到其他安全性和隐私问题。

http://www.lryc.cn/news/145536.html

相关文章:

  • 大模型开发05:PDF 翻译工具开发实战
  • LeetCode 43题:字符串相乘
  • 基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
  • Jmeter性能综合实战 —— 签到及批量签到
  • 燃气管网监测系统,提升城市燃气安全防控能力
  • 【SQL】1731. 每位经理的下属员工数量 ( 新思想:确定左表,依次添加后续字段)
  • AMD Radeon RX 7000/6000系列显卡安装ROCm 调用CUDA
  • 钉钉小程序引用阿里巴巴图标
  • 深入了解Nginx:高性能的开源Web服务器与反向代理
  • vue3 自定义显示内容
  • 视频行为分析——视频图像转换与ffmpeg相关操作
  • Bean 生命周期
  • JavaScript原型链污染
  • 【Java】设计模式之单例模式与工厂模式
  • web自动化框架:selenium学习使用操作大全(Python版)
  • boringssl EVP_aes_128_ecb实现
  • vxe-table中树形结构
  • Linux命令查看CPU、内存、IO使用情况简单介绍
  • RPC框架的核心是什么
  • 直播、AI赋能,美团披着荆棘前行
  • 提升代码逻辑的感觉——python循环语句
  • 【ARM Coresight 系列文章 20 -- linux perf 与 ARM coresight】
  • 微服务之Nacos
  • jvm 新生代的区域划分
  • 【C++】对于string的补充(成员函数c_str()、大小写转换、字符串和实数之间的相互转换)
  • 华为OD机试真题【羊狼农夫过河】
  • 【线性代数-3Blue1Brown】- 5 三维空间的线性变换
  • Maven入门教程(二):idea/Eclipse使用Maven
  • 【MySQL】MySQL里的用户账户和角色是什么?如何管理?
  • vbs病毒