zoukankan      html  css  js  c++  java
  • Python hashlib模块

    hashlib模块

    hashlib是一个提供字符加密功能的模块,包含MD5和SHA的加密算法,具体支持md5,sha1, sha224, sha256, sha384, sha512等算法。 该模块在用户登录认证方面应用广泛,对文本加密也很常见。模块调用很简单,那么就让我们一起来看看。。

    基本调用:

    1 import hashlib
    2 new_md5 = hashlib.md5()  #创建hashlib的md5对象
    3 new_md5.update('字符串')  #将字符串载入到md5对象中,获得md5算法加密。
    4 print(new_md5.hexdigest())  #通过hexdigest()方法,获得new_md5对象的16进制md5显示。

    简单来说。就是三步:

    1,建立加密对象。2,对字符串进行算法加密。3,获得16进制显示

    可以创建的加密算法有:md5,sha1, sha224, sha256, sha384, sha512

    1 例:
    2     new_md5 = hashlib.md5()   
    3     new_sha1 = hashlib.sha1()  
    4     new_sha256 = hashlib.sha256()

    简单调用:

    1 new_md5 = hashlib.new('md5',b'字符串').hexdigest()
    2 #或者
    3 new_md5 = hashlib.md5(str(time.time().encode('utf-8')).hexdigest()

    注意:向对象中传入字符串时,必须为编码类型。可以使用字符串前b' '的方法或使用.encode('UTF-8')的方法,使字符串变为bytes类型。

    下面我们将引入一个简单的实力来说明最常用的MD5算法在实际中的应用。在引入实力前,让我们先对MD5的基本特性有个认识。

    md5算法的特点:

    1. 压缩性:任意长度的数据,算出的MD5值的长度都是固定的。
    2. 容易计算:从原数据计算出的MD5值很容易。不管数据多大,很快就能算出一串MD5字符串来。
    3. 抗修改性:对原数据进行任何改动,哪怕修改任何一个字节,生成的MD5值也有会很大的区别。
    4. 强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

    好啦,那我们已经知道了MD5算法的特点。那么问题来了,MD5既然每次生成的值都是固定的。那么虽然是单向生成不可反推,但是如果通过碰撞方法对字符串生成MD5后与MD5值碰撞,是不是就会得到MD5对应的字符串了呢?答对了!这样是可以的,换句话说,如果某用户数据库泄露了,拿到了密码库中的MD5就能通过碰撞的方法将密码破解出来。那么问题又来了,既然这样,那也没有什么用了啊。。非也,让我们用一个小小的技巧,让这个碰撞方法失效。这个方法就是“加盐”,什么是加盐呢?

    “加盐”就是对原密码添加额外的字符串,然后再生成MD5值,这样就没有办法进行破解了,除非拿到“加盐”字符串,但碰撞方法也是需要一个一个重新计算MD5值后再进行碰撞对比的,难度也是极其大的。那么看下面的代码吧:

    例:MD5密码认证,带“加盐”方法

    1 import hashlib
    2 
    3 yan = '!任#意%字^符@'  #定义加盐字符串
    4 pwd = input('>>>')
    5 
    6 md5_pwd = hashlib.md5()
    7 md5_pwd.update((pwd+yan).encode('UTF-8'))  #加盐
    8 pwd = md5_pwd.hexdigest()
    9 #pwd = hashlib.new('md5',(pwd+yan).encode('UTF-8')).hexdigest()   #也可以这样简写哦。。一句话搞定。

    栗子是简写的,不过营养在,好吃不难。

  • 相关阅读:
    字符链接
    成绩统计
    看不懂的代码
    新的开始
    appserv 求指教php运行环境
    指针 数组 复制
    HTML 标题居中 小小积累
    用指针 数组连接
    [导入]Hibernate+Spring+Struts2+ExtJS开发CRUD功能
    [导入]Hibernate+Spring+Struts2+ExtJS开发CRUD功能
  • 原文地址:https://www.cnblogs.com/sly27/p/8716626.html
Copyright © 2011-2022 走看看