一、hashilb 模块

pythonhashlib提供了常见的摘要算法,如MD5,SHA1等等。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

摘要算法就是通过 摘要函数f()任意长度的数据data 计算出 固定的长度的摘要digest,目的是为了发现原始数据是否被人被人篡改过。

摘要算法之所以能指出数据是否被篡改过,就是因为摘要函数是一个单向函数,计算(data)很容易,但通过digest发推data确非常难。而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。

常见的摘要算法MD5为例,计算出一个字符串的MD5值:

import hashlib

md5 = hashlib.md5()   #实例化一个MD5摘要算法对象
#能够让一个字符串 唯一的 对应 一个固定的值
md5.update('alex3714'.encode('utf-8'))  #使用MD5算法的对象来操作字符串
#获取算法结果
ret = md5.hexdigest()    #获取算法的结果hexdigest 16进制消化
print(ret,type(ret),len(ret))

#校验步骤
#注册:alex3714 -摘要->文件
#登录 alex3714-摘要,和文件里面字符串对比,

 如果数据量很大,如检验文件的一致性,好几百G可以分批量摘要,可以分块多次调用update(),最后计算的结果是一样的:

md5 = hashlib.md5()
md5.update('alex'.encode('utf-8'))
md5.update('3714'.encode('utf-8'))

ret = md5.hexdigest()
print(ret)
撞库概念 MD5:
#别人有一个庞大的库:字符串-->md5值的关系
#加盐办法解决
md5obj = hashlib.md5('erxiao'.encode('utf8'))   #实例化一个MD5算法的对象,加盐 xiao
ret = md5obj.hexdigest()
print(ret)

 动态加盐:

#动态加盐
# 常用到到userinfo表存密码时候
username = 'alex'
md5obj = hashlib.md5(username.encode('utf-8'))      #实例化一个MD5摘要算法的对象,加盐
md5obj.update('alex3714'.encode('utf-8'))   # 使用md5算法的对象来操作字符串
ret = md5obj.hexdigest()    # 获取算法的结果 hex+digest 16进制+消化
print(ret)

#ee838c58e5bb3c9e687065edd0ec454f
MD5是最常见的摘要算法,速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1,调用SHA1和调用MD5完全类似:
SHA1的结果是160 bit字节,通常用一个40位的16进制字符串表示。比SHA1更安全的算法是SHA256和SHA512,不过越安全的算法越慢,而且摘要长度更长。

二、configparser模块

该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

1.创建文件

 常用文件格式:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes
  
[bitbucket.org]
User = hg
  
[topsecret.server.com]
Port = 50022
ForwardX11 = no

用python生成一个这样的文档

import configparser

config = configparser.ConfigParser()
config['DEFAULT'] = {'ServerAliveInterval':45,
                      'Compression':'yes',
                      'CompressionLevel':'9',
                      'Forward11':'yes'
            }
config['bitbucket.org'] = {'User':'alex'}
config['topsecret.server.com'] = {'HostPort':'11211','Forwardxll':'no'
                    }
with open('example.ini', 'w') as configfile:
    config.write(configfile)
View Code

相关文章:

  • 2021-04-08
  • 2021-12-27
  • 2021-09-25
  • 2022-12-23
  • 2021-10-31
  • 2021-10-12
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-07-09
  • 2021-08-24
  • 2021-11-01
  • 2022-12-23
相关资源
相似解决方案