zoukankan      html  css  js  c++  java
  • python学习笔记 day28 hashlib

    1. hashlib是一个提供摘要算法的模块

    摘要算法有很多,比如md5 sha系列等,一般最常用的摘要算法就是md5;

    应用场景就是用户输入的密码其实在内部存储是绝对不能明文存储的,所以要使用md5摘要算法进行加密;

    下面就是xuanxuan使用md5加密算法进行加密的例子:

    import hashlib
    md5=hashlib.md5()
    md5.update(bytes("xuanxuan",encoding='utf-8'))
    print(md5.hexdigest())

    运行结果:

    下面是对xuanxuan使用sha1摘要算法进行加密的例子:

    import hashlib
    sha=hashlib.sha1()   # 使用hashlib模块中sha1摘要算法
    sha.update(bytes('xuanxuan',encoding='utf-8'))   # 使用sha1摘要算法对字符串xuanxuan 进行加密
    print(sha.hexdigest())

    运行结果:

    接下来我们使用摘要算法(md5)模拟用户注册(将用户注册输入的用户名和密码使用摘要算法进行存储),然后模拟用户登录(将用户登录时输入的用户名和密码与摘要算法存储的密文进行对比):

    import hashlib
    #模拟用户注册---将注册的密码使用md5摘要算法进行加密,然后将加密后的密码存储到文件中
    usm=input("please input the username:")
    pwd=input("please input your password:")
    
    with open("info",'w',encoding='utf-8') as file:
        md5 = hashlib.md5()
        md5.update(bytes(pwd, encoding='utf-8'))
        file.writelines((usm,'|',md5.hexdigest()))  # 把用户注册时的用户名和密码(已经使用摘要算法进行加密)写入文件
    
    # 模拟用户登录验证---将用户登录时输入的密码使用同一种md5摘要算法进行加密,由于对同一种字符串使用相同的加密算法进行加密获得的结果相同,所以只要比对加密后的结果是否相等就可以
    username=input("username>>>")
    password=input("password>>>")
    with open("info",'r',encoding='utf-8') as file:
        for line in file:
            u,p=line.split("|")
            print(u,p)
            md5=hashlib.md5()
            md5.update(bytes(password,encoding='utf-8'))
            md5_password=md5.hexdigest()
            print(username, md5_password)
            if u==username and p==md5_password:
                print("登录成功")
            else:
                print("登录失败")

    运行结果:

     结论:

    不管摘要算法有多么不同,算法的功能始终是:

    1.对于相同的字符串使用同一种摘要算法进行加密得到的结果总是相同的;

    2.对于相同的字符串使用不同的摘要算法进行加密得到的结果不一定相同;

    3.不管使用什么摘要算法,使用hashlib的方式不变;

    摘要算法的用处:
    1. 进行密文处理;

    2. 文件的一致性验证:

         1. 下载时,下载的文件和远程服务器的文件是否一致;

         2. 两台机器上的两个文件是否相同;

    talk is cheap,show me the code
  • 相关阅读:
    AJAX异步传输——以php文件传输为例
    js控制json生成菜单——自制菜单(一)
    vs2010中关于HTML控件与服务器控件分别和js函数混合使用的问题
    SQL数据库连接到服务器出错——无法连接到XXX
    PHP错误:Namespace declaration statement has to be the very first statement in the script
    【LeetCode】19. Remove Nth Node From End of List
    【LeetCode】14. Longest Common Prefix
    【LeetCode】38. Count and Say
    【LeetCode】242. Valid Anagram
    【LeetCode】387. First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9703214.html
Copyright © 2011-2022 走看看