经常使用模块 - hashlib模块

1、简介

Python的hashlib提供了常见的摘要算法,如MD五、SHA一、SHA22四、SHA25六、SHA38四、SHA512等算法。python

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

举个例子,你写了一篇文章,内容是一个字符串“how to use python hashlib – by mayi”,并附上这篇文章的摘要是“75b850b26f4e75b1ad3db76a255065f2”。若是有人篡改了你的文章,并发表为“how to use python hashlib – by bob”,你能够一会儿指定bob篡改了你的文章,由于根据“how to use python hashlib – by bob”计算出的摘要不一样于原始文章的摘要。数据库

2、md5加密

import hashlib

hash = hashlib.md5()

hash.update("mayi".encode("utf-8"))

# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

3、sha1加密

import hashlib

hash = hashlib.sha1()

hash.update("mayi".encode("utf-8"))

# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

4、sha256加密

import hashlib

hash = hashlib.sha256()

hash.update("mayi".encode("utf-8"))

# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

5、sha384加密

import hashlib

hash = hashlib.sha384()

hash.update("mayi".encode("utf-8"))

# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

6、sha512加密

import hashlib

hash = hashlib.sha512()

hash.update("mayi".encode("utf-8"))

# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492daac2b9c03a89defe
print(hash.hexdigest())

7、“加盐”加密

以上的加密算法虽然很厉害,但仍然存在缺陷,经过撞库能够反解。因此必要对加密算法中添加自定义key再来作加密。安全

import hashlib

hash = hashlib.md5('python'.encode('utf-8'))

hash.update("mayi".encode("utf-8"))

# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

8、摘要算法应用

摘要算法能应用到什么地方?举个经常使用的例子:并发

任何容许用户登陆的网站都会存储用户登陆的用户名和密码。如何存储用户名和密码呢?方法是存到数据库表中:运维

name函数

password网站

mayi加密

123456spa

bob

abc123

alice

alice2019

若是以明文保存用户密码,若是数据库泄露,全部用户的密码就落入到黑客的手里。此外,网站运维人员是能够访问数据库的,也就是能获取到全部用户的密码。

正确的保存密码的方式是不存储用户的明文密码,而是存储用户密码的摘要,好比MD5:

name

password

mayi

e10adc3949ba59abbe56e057f20f883e

bob

e99a18c428cb38d5f260853678922e03

alice

02d740cd2a62024d20152c137e67ef65

当用户登陆时,首先计算用户输入的明文密码的MD5,而后和数据库存储的MD5比较,若是一致,说明密码输入正确,不然,密码输入错误。

存储MD5的好处是即便运维人员能访问数据库,也没法获知用户的明文密码。

采用MD5存储密码是否就必定安全呢?也不必定。假设你是一个黑客,已经拿到存储MD5密码的数据库,如何经过MD5反推用户的明文密码呢?暴力破解费时费力,真正的黑客是不会这么干的。

考虑这么个状况,不少用户喜欢用“123456”、“888888”、“password”等这些简单的密码,因而,黑客能够事先计算出这些经常使用的密码的MD5值,获得一个反推表。这样,无需破解,只须要对比数据库的MD5,黑客就得到了使用经常使用密码的用户帐号信息。

对于用户来说,固然不要使用过于简单的密码。可是,咱们可否在程序设计上对简单的密码增强保护呢?

因为经常使用密码的MD5值很容易被反推出来,因此,要确保存储的用户密码不是那些已经被计算出来的经常使用密码的MD5就行了,这一方法经过对原始密码加一个复杂字符串来实现,俗称“加盐”。

相关文章
相关标签/搜索