md5信息摘要算法

# -*- 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摘要算法,看过了一遍这次从新理解,感觉清楚了一些,但是算法具体实现细节我就不讲了,免得误人子弟,这里有链接,要看具体实现方法的话可以看看这位仁兄的博客 点击打开链接
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值