码迷,mamicode.com
首页 > 其他好文 > 详细

hashlib模块

时间:2018-05-24 16:31:17      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:字节   imp   str   密码   结果   转换   算法应用   篡改   pytho   

hashlib模块

前言

python的hashlib提供了常见的摘要算法,如MD5、SHAI等。
摘要算法又称哈希算法、散列算法。它通过一个函数,吧任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。


摘要算法是通过摘要函数f()对任意长度的数据计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单项函数,计算(data)很容易,但通过digest反推data却非常困难。而且,对原始数据做一个bit的修改,都会导致计算的摘要完全不同。

一、使用示例:


    import hashlib

    md5 = hashlib.md5()
    md5.update(‘how to use md5 in python hashlib?‘)
    print(md5.hexdigest()) 

    计算结果如下:
    d26a53750bc40b38b65a520292f69306

     如果数据量很大(计算大文件是否被篡改),可以分块多次调用update(),最后计算的结果是一样的。

    md5 = hashlib.md5()
    md5.update(‘how to use md5 in ‘)
    md5.update(‘python hashlib?‘)
    print md5.hexdigest()


    MD5是最常见的摘要算法,速度很快,生成结果是固定的128bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似。

    import hashlib
    sha1 = hashlib.sha1()
    sha1.update(‘how to use sha1 in ‘)
    sha1.update(‘python hashlib?‘)
    print sha1.hexdigest() 
SHA1的结果是160bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。 二、摘要算法应用 任何允许用户登录的网站都会存储用户登录的用户名和口令,如何存储用户名和口令呢?方法是存到数据库表中,如果以明文保存如果数据库泄漏,所有的用户的口令就落入黑客的手里。正确的保存方式是不存储明文口令,而是存储用户口令的摘要,这样的话还是有一个隐患,就是“撞库”黑客可以事先计算常用口令的MD5值,然后和得到的密码进行比对。 能否在程序设计上对简单口令加强保护呢?hashlib摘要算法支持对数据进行“加盐”: hashlib.md5("salt".encode("utf8")) 经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令。如果假定用户无法修改登录名,就可以通过把登录名作为Salt的一部分来计算MD5,从而实现相同口令的用户也存储不同的MD5。

hashlib模块

标签:字节   imp   str   密码   结果   转换   算法应用   篡改   pytho   

原文地址:https://www.cnblogs.com/qingmu6/p/9083080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!