python hashlib模块算法

hashlib模块

python中的hashlib为我们提供了常见的摘要算法,如MD5、sha1

那么现在问题来了,摘要算法what?

摘要算法又称哈希算法、散列算法。

它指的是把任意长度的数据data,通过函数f(),转换为一个长度固定的摘要digest(通常用16进制的字符串表示),

目的是为了发现原始的数据是否被人篡改过。

摘要算法之所以可以辨别数据是否被人篡改过,就是因为摘要函数是一个单向函数,

想要计算f(data)很容易,但是通过digest反推data却非常困难。

并且,只要是对原始数据做哪怕一点点改动,都会导致计算出的摘要截然不同。

接下来我们以常见的摘要算法MD5为例,

#计算出一个字符串的MD5值
import hashlib
md5 = hashlib.md5()
md5.update(b‘hello,python‘)  #ps:需要转换成b字节或者encode(‘utf-8‘)
print(md5.hexdigest())

输出结果:

15ac32041ff74c93c1842b152df7519e

import hashlib
md5 = hashlib.md5()
md5.update(‘hello,python‘.encode(‘utf-8‘))
print(md5.hexdigest())

输出结果:

15ac32041ff74c93c1842b152df7519e

如果数据量很大,可以分块多次调用update(),

一段字符串分成几段摘要和直接进行摘要的结果是相同的

import hashlib
md5 = hashlib.md5()
md5.update(b‘hello,‘)        #原字符串中有逗号的不要忘记了
md5.update(b‘python‘)
print(md5.hexdigest())

输出结果:

15ac32041ff74c93c1842b152df7519e

模仿文件校验

import hashlib
def check_md5(filename):
    md5 = hashlib.md5()
    with open(filename,‘rb‘) as f:
        while True:
            content = f.read(2048)    #分段读取,以免占用大段内存
            if content:
                md5.update(content)
            else:
                break
    return md5.hexdigest()
file1 = check_md5(‘md5_test1‘)  #我创建的md5_test1中的数据为11112file2 = check_md5(‘md5_test2‘)   #我创建的md5_test2中的数据为11111print(file1)print(file2)

输出结果:

afcb7a2f1c158286b48062cd885a9866
b0baee9d279d34fa1dfd71aadb908c3f

md5摘要加密传输进来的密码,并动态加盐提高安全性

import hashlib
def md5_digest(salt,pwd):
    md5 = hashlib.md5(salt.encode(‘utf-8‘))  #salt,加盐操作,增加安全性,而且还可以对盐进行切片进一步增加安全性如salt[::-1]
    md5.update(pwd.encode(‘utf-8‘))
    return md5.hexdigest()

salt = ‘盐‘
pwd = ‘123450‘
print(md5_digest(salt,pwd))

输出结果:

684d41d1f7512e40a8939fd4fed9518a

经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。

但是如果有两个用户都使用了相同的简单口令比如123456,在数据库中,将存储两条相同的MD5值,这说明这两个用户的口令是一样的。有没有办法让使用相同口令的用户存储不同的MD5呢?

如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。

摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法,不能用于加密(因为无法通过摘要反推明文),只能用于防篡改,但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全一样,就是将前面的md5改成sha1而己。
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。
比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

原文地址:https://www.cnblogs.com/python-wang/p/9600412.html

时间: 2024-11-05 21:36:31

python hashlib模块算法的相关文章

Python hashlib模块 (主要记录md5加密)

python提供了一个进行hash加密的模块:hashlib 下面主要记录下其中的md5加密方式(sha1加密一样把MD5换成sha1) [python] view plaincopyprint? >>> import hashlib >>> m = hashlib.md5() >>> m.update("Nobody inspects") >>> m.update(" the spammish repe

python hashlib 模块

hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib m = hashlib.md5() m.update(b"Hello") m.update(b"It's me") print(m.digest()) m.update(b"It's been a long time since last time w

python hashlib模块 logging模块

一 hashlib模块 import hashlib md5=hashlib.md5() #可以传参,加盐处理 print(md5) md5.update(b'alex') #update参数必须是byte类型 md5.update(b'sb') print(md5.hexdigest()) #结果与update(b'alexsb')是一样的 输出: <md5 HASH object @ 0x00000204693FC3C8> 3b30fab9b1de071c65055026862ce00e

python hashlib模块

作用:可以用来加密.md5.sha1.sha256.sha512 1 >>> import hashlib #导入hashlib加密模块 2 >>> m=hashlib.md5() #定义一个md5对象 3 >>> print(m) 4 <md5 HASH object @ 0x7fb78f99c6c0> #输出对象m可以看出是一个md5 hash 对象 5 >>> m.update("hello world&q

25.Python序列化模块,hashlib模块, configparser模块,logging模块,异常处理

一.序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来.但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中.你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢?没错序列化的过程就是从dic 变成str(di

python常用模块1

一. 什么是模块: 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译为共享库或DLL的C或C++扩展 3 包好一组模块的包 4 使用C编写并链接到python解释器的内置模块 为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过pyth

Python常用模块之hashlib

Python里面的hashlib模块提供了很多加密的算法,这里介绍一下hashlib的简单使用事例,用hashlib的md5算法加密数据 import hashlib hash = hashlib.md5()#md5对象,md5不能反解,但是加密是固定的,就是关系是一一对应,所以有缺陷,可以被对撞出来 hash.update(bytes('admin',encoding='utf-8'))#要对哪个字符串进行加密,就放这里 print(hash.hexdigest())#拿到加密字符串 # ha

md5模块(Python内置模块)和hashlib模块

转自https://my.oschina.net/duhaizhang/blog/67214 MD5模块用于产生消息摘要,康用来判断文件是否相同. python的md5模块使用非常简单,包括以下几个函数: md5.new([arg]) 返回一个md5对象,如果给出参数,则相当于调用了update(arg) md5.md5(s) 返回字符串s的md5 md5.updte(arg) 用string参数arg更新md5对象.即将要计算arg的消息摘要值. md5.digest() 返回16字节的摘要,

Python学习笔记——基础篇【第六周】——hashlib模块

常用模块之hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 hash = md5.new() hash.update('admin') print hash.hexdigest() MD5-废弃 import sha hash = sha.new() hash.update('admin') print hash.hexdigest() sha-废