hashlib模块(摘要算法,用于加密)

目录

算法介绍

加盐


算法介绍

Python的hashlib提供了常见的摘要算法,如MD5,SHA1,SHA224, SHA256, SHA384, SHA512等算法。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

我们以常见的摘要算法MD5为例,计算出一个字符串的MD5值:

import hashlib

md5 = hashlib.md5()  #实例化一个md5算法对象
md5.update(bytes('aaa',encoding='utf-8'))   #进行摘要算法,注意必须是bytes数据类型
print(md5.hexdigest())   #47bce5c74f589f4867dbd57e9ca9f808

如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:

md5 = hashlib.md5()
md5.update((bytes('aaa',encoding='utf-8')))
md5.update((bytes('bbb',encoding='utf-8')))
print(md5.hexdigest())

MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:

import hashlib
 
sha1 = hashlib.sha1()
sha1.update((bytes('aaa',encoding='utf-8')))
print(sha1.hexdigest())

SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

加盐

由于常用口令的MD5值很容易被撞库计算出来,所以,要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5,这一方法通过对原始口令加一个复杂字符串来实现,俗称“加盐”:

import hashlib

md5 = hashlib.md5(bytes('abc',encoding='utf-8'))  #加盐
md5.update(bytes('aaa',encoding='utf-8'))
print(md5.hexdigest())   #ac2e33f90b26451d1c8f8987678f860d

猜你喜欢

转载自blog.csdn.net/qq_41922768/article/details/83071257