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(b\'alex3714\')   # 对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(b\'salt\') # 创建一个md5对象,并且加盐
md5_1.update(b\'alex3714\')   # 对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\')

 

版权声明:本文为whylinux原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/whylinux/p/9740233.html