Python中摘要算法MD5,SHA1讲解
来源:互联网 发布:php 判断数据类型 编辑:程序博客网 时间:2024/06/01 23:53
摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过(不同的data计算出来的摘要不同)。
常见的摘要算法有MD5和SHA1
MD5
import hashlibm=hashlib.md5()m.update('zhangkang')print(m.hexdigest())输出:09b32682a49db34d3c9d7e6d97f85a4a
如果数据太长,可以多次调用update(),结果是一样的
import hashlibm=hashlib.md5()m.update('zhang')m.update('kang') #输出结果一样print(m.hexdigest())输出:09b32682a49db34d3c9d7e6d97f85a4a
假如我们改变原始数据中的一个字母看看计算的MD5值是否完全不同
import hashlibm=hashlib.md5()m.update('zhangkanf')#输出结果完全不一样,虽然只改变一个字母print(m.hexdigest())输出:17d2bcf39906311768c2f363778d2801
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。
SHA1
import hashlibs=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 hashlibdb={'zhangkang':'25c25c67943e82a116ec8c32218a5068',}#明文密码是:zhangkang123456def login(username,password): m=hashlib.md5() m.update(username+password+'the-salt') passwd=m.hexdigest() if passwd!=db[username]: return False else:return Truewhile(True): username=raw_input('Input username:') password=raw_input('Input password:') if(login(username,password)): print('login success!') break else: print('login failed!')
阅读全文
0 0
- Python中摘要算法MD5,SHA1讲解
- 摘要算法 SHA1 MD5
- Python基础-摘要算法hashlib中的MD5和SHA1
- HMAC-SHA1和MD5 消息摘要算法(java)
- SHA1摘要算法实现
- SHA1摘要算法
- md5 & sha1 算法
- 信息摘要工具类-MD5、CRC32、SHA1
- Symbian OS v9上信息摘要算法的实现(MD5/SHA1)
- python hashlib sha1和MD5哈希算法
- Java实现SHA1摘要算法
- openssl学习篇之base64编码、解码;md5 摘要;sha1摘要;3des加密,解密;rsa算法
- MD5 报文摘要算法
- MD5摘要算法原理
- MD5摘要算法
- MD5 摘要算法实例
- MD5信息摘要算法
- MD5摘要算法
- Java学习经历回顾----泛型
- 浅谈嵌入式MCU开发中的三个常见误区
- 关于程序员的59条搞笑但却真实无比的编程语录
- 不能对非静态字段/方法进行静态引用
- HashSet 的使用 自定义hashCode和equals
- Python中摘要算法MD5,SHA1讲解
- JavaBean
- 第八周(1)项目三 顺序串的算法
- nginx服务器搭建
- java中的Font
- 深入理解Java中的字段与属性的区别
- Hibernate 常用API
- 一次谷歌面试趣事
- Doctype作用?严格模式与混杂模式如何区分?它们有何意义?