Python中摘要算法MD5,SHA1简介及应用实例代码
关于算法的学习,小编觉得编程语言中的算法大都有一些相通的地方,主要的方面一是了解这一算法能用来干什么,另一方面,学习它在这类编程语言中怎么实现。 摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过(不同的data计算出来的摘要不同)。 常见的摘要算法有MD5和SHA1 MD5 import hashlib 输出: 如果数据太长,可以多次调用update(),结果是一样的 import hashlib m=hashlib.md5() m.update('zhang') m.update('kang') #输出结果一样 print(m.hexdigest()) 输出: 09b32682a49db34d3c9d7e6d97f85a4a 假如我们改变原始数据中的一个字母看看计算的MD5值是否完全不同 import hashlib m=hashlib.md5() m.update('zhangkanf')#输出结果完全不一样,虽然只改变一个字母 print(m.hexdigest()) 输出: 17d2bcf39906311768c2f363778d2801 MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。 SHA1 import hashlib s=hashlib.sha1() s.update('my name is zhangkang') print(s.hexdigest()) 输出: 512e877d47cd06246b24ac99027991cbfa67aec1 和MD5类似,同样支持分块多次update(),只是输出结果有些区别。SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。 摘要算法应用 假如我们有一个网站,数据库中保存着用户名和密码等信息,假设数据库中的用户密码都是明文,那么一旦数据库泄露,那么所有用户的密码就会显而易见。这样有可能导致用户的信息泄露,而正确保存用户密码的方式是不保存明文密码,而是保存密码的MD5值。当用户登录的时候,先计算密码的MD5值,然后再和数据库中的比较。有人可能会问,如果密码的MD5值泄露了呢?这个没关系,因为计算数据的MD5值很方便,但是由MD5值反推原始数据基本不可能。为了更加安全的保护用户的密码信息,在计算密码的MD5值的时候,建议连同用户名,密码,或者其他固定字符串都一并update(),也就是俗称的”加盐”。 #模拟用户登录 import hashlib db={ 'zhangkang':'25c25c67943e82a116ec8c32218a5068',} #明文密码是:zhangkang123456 def login(username,password): m=hashlib.md5() m.update(username+password+'the-salt') passwd=m.hexdigest() if passwd!=db[username]: return False else:return True while(True): username=raw_input('Input username:') password=raw_input('Input password:') if(login(username,password)): print('login success!') break else: print('login failed!') 总结 以上就是本文关于Python中摘要算法MD5,SHA1简介及应用实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持! 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- python proxy-auth中的phantomjs selenium无法正常工作
- Python 特殊语法:filter、map、reduce、lambda功能实例
- QQ的坦白说,是匿名的!这可难不倒我!我用Python分分钟破解
- Python装饰器decorator用法实例
- python – 使用pyplot返回复杂值的绘图函数
- python – 怎么可能是len(sys.argv)<= 0?
- str()和repre()的区别
- Django迁移:如何从模型的当前状态生成数据库(旧的syncdb –
- python – Sympy:在多项式中删除高阶项
- python 解决flask 图片在线浏览或者直接下载的问题