一、hashilb 模块
python的hashlib提供了常见的摘要算法,如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)