首页 > 编程语言 >python hash

python hash

时间:2023-12-12 22:34:35浏览次数:68  
标签:hashlib hash python many update 哈希 sha256

python 中的 hash

我的博客

程序源码

原书:《Python全栈安全》

这里使用 python 3.8,使用哈希函数计算消息的摘要信息,得到其哈希值(散列值)。在 python 下可以使用如下语句得到消息的哈希值:

message='message'
hash(message)

哈希具有如下特性:

  1. 确定性,相同的消息使用同一个哈希函数计算得到相同的哈希值
  2. 固定长度的哈希值,输入的消息长度是不等的,计算得到的哈希值是具有固定长度的
  3. 雪崩效应,消息的细微差别,会导致哈希值的巨大区别

哈希函数属性

  1. 单向函数,难以通过逆向工程破解
  2. 弱抗碰撞性,已知一条消息,难以查找到另一条有相同哈希值的消息
  3. 强抗碰撞性,对所有的消息,难以查找到两条具备相同哈希值的消息

检测数据完整性

计算数据的哈希值,重新计算的哈希值与旧值做比较,若二者不一致,则表明消息不具备完整性。

python 支持的哈希函数

python 有 hashlib 模块:

import hashlib
sorted(hashlib.algorithms_available)
sorted(hashlib.algorithms_guaranteed)
>>> sorted(hashlib.algorithms_guaranteed)
['blake2b', 'blake2s', 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', 'sha512', 'shake_128', 'shake_256']

安全与不安全的哈希函数

在上面列出的一些哈希算法中,有一些是安全的算法,一些是已经被破解的算法。

MD5 算法在 2004 年就已经被证实存在碰撞。

SHA-1 算法在 2017 年由谷歌发布了第一次碰撞。

若以前的系统使用了上面的两种算法,那么出于安全考虑,需要重构代码。

python 中的加密哈希

import hashlib
named = hashlib.sha256()#命名构造函数
generic = hashlib.new('sha256')#通用构造函数

下面两条消息可以展示MD5算法的碰撞:

'd131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70'

'd131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70'

验证程序如下:

from hashlib import md5

x = bytearray.fromhex('d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70')
y = bytearray.fromhex('d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70')
print(x==y)
print(md5(x).digest() == md5(y).digest())

我们可以将消息一股脑的给到哈希函数,计算哈希值,也可以通过使用 update 的方式迭代计算哈希值,使用 update 方式计算得到的哈希值与迭代计算得到的哈希值一致:

from hashlib import sha256

once = sha256()
once.update(b'message')
many = sha256()
many.update(b'm')
many.update(b'e')
many.update(b's')
many.update(b's')
many.update(b'a')
many.update(b'g')
many.update(b'e')
print(once.digest() == many.digest())

确定了消息,确定了哈希算法,无论什么平台、什么语言,计算得到的哈希值是一致的。

哈希不同于校验和

哈希函数具有更强的抗碰撞性,而校验和函数的速度更快。

标签:hashlib,hash,python,many,update,哈希,sha256
From: https://www.cnblogs.com/arvin-blog/p/17898000.html

相关文章

  • 一些好玩的Hash算法(CMU15445)
    graphLRR[HashTable]-->St[静态哈希策略] R-->Dy[动态哈希策略] St-->线性探测法 St-->t1[RobinHood] St-->t2[CuckooHashing] Dy-->Ch[ChainedHashing] Dy-->Ex[ExtendibleHashing] Dy-->Lin[LinearHashing] Hash策略的分类静态哈希哈希表......
  • 深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现
     网络和Web开发是Python中不可或缺的重要领域,而其核心模块如urllib、requests和http在处理网络请求、HTTP请求和响应以及Web开发中扮演着关键的角色。这些模块为开发者提供了丰富的工具,使其能够灵活处理网络通信、构建Web应用和与远程服务器进行交互。深入了解这些模块的用法和作......
  • Python高级之闭包函数
    闭包函数【一】闭包函数的定义闭包(Closure)是指在函数内部定义的函数,并且这个内部函数可以访问外部函数的变量。这种机制允许函数保留对它创建时可见的变量的访问权,即使在其生命周期结束后也可以使用。闭包的主要特点是:内部函数定义在外部函数内部。内部函数可以引用外部函数......
  • Python项目之员工管理系统-函数版
    员工管理系统#完成以下功能'''---------------员工系统---------------1:注册2:登陆3:添加员工信息4:查看指定员工信息5:查看所有员工信息6:删除指定员工信息......
  • 侯哥的Python分享--系列教程
    合集-mysql(26) 1.侯哥的Python分享2019-04-162.MySQL基础1-关系型数据库与非关系型数据库2022-03-173.MySQL基础2-数据库及表的操作2022-03-174.MySQL基础3-数据库增删改操作2022-03-175.MySQL基础4-数据查询07-176.MySQL基础5-用户及权限管理07-187.MySQL基础6-常用数......
  • Python办公自动化(一)对比execl内容
    Python办公自动化(一)对比execl内容安装依赖需要安装的库:openpyxl,pandas如何安装:打开命令行(win+R输入cmd/powershell),输入以下命令pipinstallopenpyxlpipinstallpandas代码新建一个文件夹,新建一个文件,文件名为compare.py,输入以下代码,保存。#使用说明#1.将df1.xlsx......
  • 【Python爬虫】爬虫框架Scrapy初使用_爬取4399游戏页面数据
    Scrapy简介Scrapy是一个用于爬取和提取数据的开源web抓取框架。它提供了一个强大的机制,让开发者可以轻松地创建和管理爬虫程序,以从网站上自动提取结构化的数据。以下是Scrapy的一些主要特点和优势:强大灵活的爬取能力:Scrapy具有高度可配置的请求处理和数据提取功能。它可以轻......
  • Python——第五章:json模块
    什么是json:json模块是用于处理JSON(JavaScriptObjectNotation)数据的模块,翻译过来叫js对象简谱。JSON是一种轻量级的数据交换格式,常用于将数据在不同语言之间进行传递。我们先来看一段json代码:wf={"name":"汪峰","age":18,"hobby":"上头条","wife"......
  • 02-python基础学习
    Python简介:python是一个解释型语言,主要理念就是优雅和简单。目前市面上存在两个版本的python,2版本现在已经停止更新。因此使用3.x版本编写的python代码无法使用2.xpython解释器进行处理。python源文件以.py结尾,其中的代码,通过使用python解释器解释执行。可以通过使用......
  • Python实现单例模式的五种写法
    单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点。在Python中,可以使用多种方法实现单例模式。本文将介绍五种常见的Python单例模式实现方式,包括使用模块、装饰器、基类、元类和线程安全机制。单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供全局......