# -*- coding: utf-8 -*-
# @Author: Clarence
# @Date: 2018-01-12 21:04:39
# @Last Modified by: Clarence
# @Last Modified time: 2018-01-12 21:17:59
"""
md5摘要算法
Message Digest Algorithm MD5 (消息摘要算法第五版) 为计算机安全领域广泛使用的一种散列函数,
用以提供消息的完整性保护 摘要算法又称哈希算法、散列算法、它通过一个函数,把任意长度的数据转换成一个长度固定的数据串(通过用16进制的字符串表示).
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过(不同的data计算机出来的摘要不同)
算法特点:
MD5算法,符合一般摘要算法的特点:
1.压缩性:任意长度的数据,算出的MD5值长度都是固定的
2.容易计算:从原数据计算出MD5值很容易
3.抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大的区别
4.强抗碰撞:已经原数据和其MD5值,想要找到一个具有相同MD5值的数据(即伪造数据)是非常困难的
生成结果是固定的128位,通常用一个32位的16进制字符串表示
import hashlib
m = hashlib.md5()
m.update("zhangkang")
print(m.hexdigest())
输出: 09b32682a49db34d3c9d7e6d97f85a4a
摘要算法的应用
假如我们有一个网站,数据库中保存着用户名和密码信息,假设数据库中的用户密码都是明文,那么一旦数据库泄露,那么所有用户的密码就会显而易见。这样有可能
导致用户的信息泄露,而正确保存用户密码的方式是不保存明文密码,而是保存密码的MD5值。当用户登录的时候,先计算密码的MD5值,然后再和数据库中的比较。
为了更加安全的保护用户的密码信息,在计算密码的MD5值得时候,建议连同用户名,密码,或者其他固定字符串都一并update(),也就是俗称的"加盐"
"""
#模拟用户登录
import hashlib
db = {
'zhangkang' : '25c25c67943e82a116ec8c32218a5068'
}
#明文密码是: zhangkang123456
def login(username, password):
m = hashlib.md5()
m.update((username+password+'the-salt').encode('utf-8'))
passwd = m.hexdigest()
if username not in db:
return False
if passwd != db[username]:
return False
else :
return True
while True:
username = input('Input username:')
password = input('Input password:')
if(login(username, password)):
print('Login success!')
break
else:
print('login failed!')
在学习的过程中遇到了md5摘要算法,看过了一遍这次从新理解,感觉清楚了一些,但是算法具体实现细节我就不讲了,免得误人子弟,这里有链接,要看具体实现方法的话可以看看这位仁兄的博客
点击打开链接
md5信息摘要算法
最新推荐文章于 2024-07-11 10:29:20 发布