首页 > 编程语言 >python内置库--hashlib

python内置库--hashlib

时间:2023-05-27 16:47:06浏览次数:39  
标签:hashlib hash python 摘要 update -- 算法 密文

1 关于hashlib与hash算法

python的hashlib提供了对hash算法的的支持,常见的算法有MD5 SHA1 SHA224等,对不同的算法,hashlib提供了一些通用的函数,以方便我们的使用

hash算法

个人理解是,它可以将任意长度的二进制值变为固定长度的二进制值。
通常,这个固定长度的二进制值叫做hash值,也叫做安全摘要,不同的输入,所计算出的hash值是不同的

更通俗化理解,就像是谍战剧发电报一样,通过hash算法,不管明文有多长,都可以把明文变化为固定长度的密文。这个密文就是hash值或者安全摘要。hash算法也有很多种,不同的算法算出的密文是不同的

下面是一个例子
image
执行结果
image
原始数据的明文变化一点点,最后的密文即摘要也会大不相同
现在把上面例子的hello加一个空格在最后面,得到的结果是
image

若原始数据的明文相同,使用的hash算法即加密算法相同,最后得到的密文肯定是相同的。但原始数据明文不同或者采用的hash算法不同,最后得到的结果是不同的

需要注意的,我们最后生成的密文的长度是固定的,也就是是说密文数据是有限的,但是明文是任意长度,就是说输入的数据是无限的,无限的数据对应到有限的密文数据,理论上说,可能会发生碰撞,即不同的明文得到了相同的密文,这就和前面说的hash的定义的相违背了。但现实中,要实现碰撞的效果,付出的代价非常大,而且我们可以采用更加安全的SHA384 SHA512算法,其密文的长度更长,这样,碰撞的概率就非常之小

2 一些相关函数和例子

不同hash算法的构造器函数

如下,基于不同的hash算法,这些函数都返回了对应算法的一个hash对象
hashlib.md5() MD5算法, 生成128位16进制摘要
hashlib.sha1() SHA1算法 生成160位16进制摘要
hashlib.sha224() SHA224算法 生成224位16进制摘要
hashlib.sha256() SHA256算法 生成256位16进制摘要
hashlib.sha384() SHA384算法 生成384位16进制摘要
hashlib.sha512() SHA512算法 生成512位16进制摘要

其他相关函数

hash.update(data) :用需要加密的data来更新hash对象
data为bytes-like object
hash.update(a) hash.update(b) 等价于 hash.update(a+b)

hashhash.digest(): 返回最终的摘要,这是一种原始的字节形式摘要
hash.hexdigest(): 和digest()类似,但返回的长度更短,是一种16进制的字符串形式摘要

hash.copy() :复制一个hash对象

用hashlib来应用hash的算法的步骤
1 利用具体的hash算法的构造器函数来得到一个hash对象 如hashlib.md5()
2 基于bytes形式的数据,用update()来更新hash对象
3 用hexdigest()或者digest()来获得update()后的摘要

image
执行
image

image
执行
image
如上可以看出 hash.update(a) hash.update(b) 等同于hash.update(a+b)

image

执行
image

标签:hashlib,hash,python,摘要,update,--,算法,密文
From: https://www.cnblogs.com/MyRecords/p/17436773.html

相关文章

  • 创建型——工厂模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是工厂模式?工厂模式(FactoryPattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式......
  • API的应用范围主要有哪些方面?
    ​  API(ApplicationProgrammingInterface)即应用程序接口,它是一组规则和工具,通过HTTP协议将两个软件应用程序之间的通信连接起来。API的设计可以使不同应用程序的数据和功能进行交互和共享,从而促进了各种应用程序和系统的整合。下面是API应用的主要范围。1.移动应用程......
  • 创建型——抽象工厂模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是抽象工厂模式?抽象工厂模式(AbstractFactoryPattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种......
  • Python格式化字符串
    Python为我们提供了四种格式化字符串的办法,分别是:%运算符字符串format格式化字符串字面值模板字符串%运算符这种方法最常见,简单略过s="Thisis%s'sblog"%"结了冰的可乐"print(s)使用%运算符格式化字符串的语法是format%values。format是一个字符串,values可以......
  • 创建型——建造者模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是建造者模式?建造者模式(BuilderPattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它......
  • kali2021.2实现VNC
    云安全(一)VNC连接文章目录云安全(一)VNC连接前言一、VNC是什么?二、使用步骤1.下载VNC平台2.修改远程密码3.更改xstartup文件内容4.安装RealVNC总结前言之所以要出这个博客的原因是当前的课本资料太老了,我填坑填了巨多,所以呕心沥血出了这个教程,学霸就直接看更改xstartup就好。利用VNC......
  • 创建型——原型模式
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html什么是原型模式?原型模式(PrototypePattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创......
  • 如何使用ChoiceBox以接收用户的单项选择
    如何使用ChoiceBox以接收用户的单项选择ChoiceBox是一种下拉框,点击后显示可选列表,从中可以再点击选择一个选项。ChoiceBox可以用于接收用户的单项选择。效果展示示例代码importjavafx.application.Application;importjavafx.geometry.Insets;importjavafx.scene.Sce......
  • tracer ftrace笔记(17)——atrace命令抓trace
    一、atrace命令解析1.帮助信息#atrace-h用法:usage:atrace[options][categories...]选项包括:-aappname为逗号分隔的cmdlines列表启用应用程序级跟踪;*是匹配任何进程的通配符-bN使用大小为NKB的跟踪缓冲区-c......
  • AtCoder Beginner Contest 299(E,F)
    AtCoderBeginnerContest299(E,F)E(最短路)E题目大意为有\(n\)个点和\(m\)条边,我们我个这些点匹配颜色(有两种颜色),但是要满足下面的条件必须由一个点的颜色是\(1\)然后给出\(k\)点限制对于\(p_i\)这一个点,离他最近的一个颜色为\(1\)的点的最近距离为\(d_i\)既然知道某个点......