hashlib模块(摘要算法)

Posted whylinux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hashlib模块(摘要算法)相关的知识,希望对你有一定的参考价值。

  hashlib(1)

# hashlib模块
    # 现在写登录认证的时候,需要保存用户名和密码,用户名和密码是保存在文件中,并且都是明文,一旦丢了就完蛋了。所以
    # 可以用hashlib将密码转换成密文的形式存储,当用户在次输入密码时,hashlib后对之前存储的hashlib值比较即可
    # 对同样的值进行hashlib,hashlib的值不会变
    # hashlib做的事情
    # 比如有两个字符串,各有500W个字,但经过hashlib后,两个字符串中有一个字符不一样,则结果就不一样


# 摘要算法,不管使用什么样的算法,是md5还是sha,使用hashlib的方法不会变
        # md5
            # 一般情况用的都是md5,比较普遍
        # shax

    # 同样的字符串被hashlib后产生的数值是永远不会变得
    # 用在的场景
        # 密码的密文存储
        # 文件的一致性验证,校验两个文件是否一致,文件传输中常用
            # 在下载的时候 检查我们下载的文件和远程的文件是否一致
            # 两台机器上的两个文件 你想检查这两个文件是否相同,常用在检查集群服务器下,怀疑某个服务器机器与其他服务器机器不一样的情况,可使用这种摘要算法进行检查

import hashlib
md5_1 = hashlib.md5() # 创建一个md5对象
md5_1.update(balex3714)   # 对alex3714进行md5的摘要算法
print(md5_1.hexdigest())    # aee949757a2e698417463d47acac93df  # 得到密文值


# 用户注册
    # 用户输入用户名
    # 用户输入密码
    # 明文的密码进行摘要算法md5,拿到一个密文的密码
    # 将密文密码和用户名写入文件


# 用户登录
    # 用户输入登录名和密码
    # 拿到用户的密码
    # 对用户输入的密码进行摘要算法md5
    # 从存储密文密码和用户的文件中找到该用户对应的密码
    # 比较本次用户输入的密码,摘要后的密文密码是否与用户注册时的密文密码是否一致


import hashlib
usr = input(username)
pwd = input(pwd)
with open(userinfo) as f:
    for line in f:
        user, password = line.split(|)
        md5 = hashlib.md5()
        md5.update(bytes(pwd, encoding=utf-8))
        md5_pwd = md5.hexdigest()
        if usr == user and md5_pwd == password:
            print(登录成功)

 

  hashlib(2)

# md5的撞库
    # 将所有的可能性的值算出后进行md5算出密文存储在库中,给一个md5值后,被库中的MD5值匹配上了,得到了实际的明文叫做撞库

# 加盐, 加盐的方式可以解决md5的撞库问题
    # 动态加盐:使用用户名的一部分和密码的一部分进行加盐
import hashlib
md5_1 = hashlib.md5(bsalt) # 创建一个md5对象,并且加盐
md5_1.update(balex3714)   # 对alex3714进行md5的摘要算法
print(md5_1.hexdigest())    # 29520817dd17b99ea7af32890f7698f  # 得到密文值 与不加盐的不一样了



# 总结:
    # hashlib 做摘要计算的,把字节类型的内容进行摘要处理
    # 摘要算法有 md5 、sha等
    # md5
        # 正常的md5算法
        # 加盐的md5
        # 动态加盐的md5
    # 文件的一致性校验中,md5 不需要一般不需要加盐处理
    # 整体对alex3714进行摘要和分开对alex3714进行摘要结果是一样的
    # md5.update(r‘alex‘) + md5.update(r‘3714‘) = md5.update(r‘alex3714‘)

 技术分享图片

以上是关于hashlib模块(摘要算法)的主要内容,如果未能解决你的问题,请参考以下文章

hashlib模块

hashlib模块(摘要算法)

python模块之hashlib模块

模块( hashlib模块 configparse模块 logging模块)

hashlib模块

python常用模块——hashlib模块