• Python之路——hashlib模块


    hashlib提供摘要算法的模块

     1 import hashlib
     2 def get_mad5(s):
     3     md5 = hashlib.md5()
     4     md5.update(bytes(s,encoding='utf-8'))
     5     md5_pwd = md5.hexdigest()
     6     return md5_pwd
     7 def get_user_list(filename='userinfo'):
     8     u_lst = []
     9     with open(filename,'r',encoding='utf-8') as f:
    10         for line in f:
    11             line = line.strip().split('|')
    12             yield line
    13 def save_user(name,pwd,role):
    14     for line in get_user_list():
    15         if name == line[0] and get_mad5(pwd)==line[1]:
    16             return
    17     with open('userinfo','a',encoding='utf-8') as f:
    18         f.write('%s|%s|%s
    '%(name,get_mad5(pwd),role))
    19         return True
    20 while True:
    21     usr = input('username:').strip()
    22     pwd = input('password:').strip()
    23     role = input('role:').strip()
    24     if save_user(usr,pwd,role):
    25         print('success')
    26     else:print('发生错误')

    不管算法多么不同,摘要的功能始终不变
    对于相同的字符串使用同一个算法进行摘要,得到的值总是不变的
    使用不同算法对相同的字符串进行摘要,得到的值应该不同
    不管使用什么算法,hashlib的方式永远不变

    sha 算法 随着 算法复杂程度的增加 摘要的时间成本空间成本都会增加

    摘要算法应用

    密码的密文存储
    文件的一致性验证
      在下载的时候 检查我们下载的文件和远程服务器上的文件是否一致
      两台机器上的两个文件 你想检查这两个文件是否相等

    加盐

    1 import hashlib   # 提供摘要算法的模块
    2 md5 = hashlib.md5(bytes('',encoding='utf-8'))
    3 # md5 = hashlib.md5()
    4 md5.update(b'123456')
    5 print(md5.hexdigest())  # 970d52d48082f3fb0c59d5611d25ec1e

     计算一个文件的md5值

     1 # import hashlib
     2 # f = open('myfile','rb')
     3 # md5 = hashlib.md5()
     4 # md5.update(f.read())
     5 # md5 = md5.hexdigest()
     6 # f.close()
     7 # print(md5)  # 43d62b60d0bb6b4710d9d2b727a8f23b
     8 
     9 
    10 # import hashlib
    11 # import os
    12 # file_size = os.path.getsize('myfile')
    13 # a,b=divmod(file_size,1024)
    14 # md5 = hashlib.md5()
    15 # f = open('myfile','rb')
    16 # for i in range(a):
    17 #     md5.update(f.read(1024))
    18 # md5.update(f.read(b))
    19 # f.close()
    20 # md5 = md5.hexdigest()
    21 # print(md5)  # 43d62b60d0bb6b4710d9d2b727a8f23b
    22 # print('43d62b60d0bb6b4710d9d2b727a8f23b'=='43d62b60d0bb6b4710d9d2b727a8f23b')
  • 相关阅读:
    Android 应用程序集成FaceBook 登录及二次封装
    Android MVP 设计模式
    java 接口的作用和好处
    Android版本和API Level对应关系
    Android 开源库和项目 2
    高效开发iOS系列 -- 那些不为人知的KVC
    HDU 1019 Least Common Multiple 数学题解
    程序猿喜欢如何的职位描写叙述?
    从零開始搭建微信硬件开发环境全过程——1小时掌握微信硬件开发流程
    Spring ORM数据訪问——Hibernate
  • 原文地址:https://www.cnblogs.com/liuyankui163/p/8336493.html
Copyright © 2020-2023  润新知