美文网首页
摘要算法-hashlib

摘要算法-hashlib

作者: Yanl__ | 来源:发表于2019-10-23 17:30 被阅读0次

    功能

    1. 密码的密文存储
    2. 文件一致性验证
      • 在下载的时候,检查我们下载的文件和远程服务器上的文件是否一致
      • 两台机器上的两个文件,检验是否相等
    import hashlib
    md5 = hashlib.md5()  # md5 可以替换为其他摘要算法
    # md5.update(b'yanlei')  # 此处需要二进制格式
    md5.update(bytes('123456', encoding='utf-8'))
    print(md5.hexdigest())
    

    注意事项

    • md5 可以替换为其他摘要算法
    • sha 算法 随着算法复杂程度的增加 ,摘要的时间成本和空间成本都会增加
    • 密码的密文存储与验证md5
      1. 正常的md5 md5 = hashlib.md5()
      2. 加盐的 md5 = hashlib.md5(b‘盐’)
      3. 动态加盐 md5 = hashlib.md5(b'盐'+b'用户名的一部分')
    • 文件一致性校验不需要加盐
    • 可以分步摘要,得到的结果与一次性摘要得到的结果一致
    import hashlib
    md5 = hashlib.md5()  # md5 可以替换为其他摘要算法
    # md5.update(b'yanlei')  # 此处需要二进制格式
    # md5.update(bytes('123456', encoding='utf-8'))
    md5.update(b'12')
    md5.update(b'3456')
    print(md5.hexdigest())
    

    例子:模拟用户的登录

    import hashlib
    usr = input('username: ')
    pwd = input('password: ')
    with open('userinfo') as f: # userinfo中存储用户名与密文密码
        for line in f:
            user, passwd = line.split('|')
            md5 = hashlib.md5()
            md5.update(bytes(pwd, encoding='utf-8'))
            md5_pwd = md5.hexdigest()
            if user == usr and md5_pwd == passwd:
                print('登录成功')
    
    

    例子:验证文件一致性

    import hashlib
    def check_file(filename):
        md5 = hashlib.md5()
        with open(filename, encoding='utf-8') as f:
            ch = f.read(10)  # 一次读10个字节
            while ch:
                md5.update(bytes(ch, encoding='utf-8'))
                ch = f.read(10)
        ret = md5.hexdigest()
        return ret
    
    ret1 = check_file('userinfo')
    ret2 = check_file('userinfo2')
    print(ret1, '\n', ret2, sep='')
    

    相关文章

      网友评论

          本文标题:摘要算法-hashlib

          本文链接:https://www.haomeiwen.com/subject/yfofyctx.html