3.1 hashlib 加密,摘要算法.
3.2 configparser 配置文件 了解!
#配置文件:
# 放置一些常用的变量,路径.
# with open('hashlib_file')
'''
;path1 = 'c:userapp01 user1表'
;path2 = 'c:userapp01 user2表'
;path3 = 'c:userapp01 user3表'
;PAI = 3.1415925
;LANGRAGE = 'CHINA'
3.2 configparser 配置文件 了解!
#配置文件:
# 放置一些常用的变量,路径.
# with open('hashlib_file')
'''
;path1 = 'c:userapp01 user1表'
;path2 = 'c:userapp01 user2表'
;path3 = 'c:userapp01 user3表'
;PAI = 3.1415925
;LANGRAGE = 'CHINA'
'''
3.3 logging模块.
3.3 logging模块.
1
# hash: 算法, 结果是什么? 是内存地址,
# print(hash('123'))
# dic = {'name':'alex'}
# print(hash('name'))
# print(id('name'))
# print(hash('123'))
# dic = {'name':'alex'}
# print(hash('name'))
# print(id('name'))
# hashlib 模块 与加密相关,被称作 摘要算法.
# 1,是一堆算法的合集,他包含很多算法(加密的).
# 2,hashlib的过程就是将字符串转化成---->数字的过程.
# 3,hashlib对相同的字符串转化成的数字相同.
# 4,不同的电脑,对相同的字符串进行 加密 转化成的数字相同.
# 2,hashlib的过程就是将字符串转化成---->数字的过程.
# 3,hashlib对相同的字符串转化成的数字相同.
# 4,不同的电脑,对相同的字符串进行 加密 转化成的数字相同.
# 用在哪里?
# 密文(密码).
# 将密码用算法加密放置到数据库,每次取出验证.
# 文件的校验.
# 密文(密码).
# 将密码用算法加密放置到数据库,每次取出验证.
# 文件的校验.
1初识 hashlib
import hashlib #md5 加密算法 常用算法, 可以满足一般的常用的需求 #sha 加密算法 级别高一些, 数字越大级别越高,加密的效率越低,越安全. #md5 # s1 = '12343254' # ret = hashlib.md5() # 创建一个md5对象 # ret.update(s1.encode('utf-8')) # 调用此update方法对参数进行加密 bytes类型 # print(ret.hexdigest()) # 得到加密后的结果 定长 # # s2 = 'alex12fdsl,.afjsdl;fjksdal;fkdsal;fld;lsdkflas;dkfsda;3' # ret = hashlib.md5() # 创建一个md5对象 # ret.update(s2.encode('utf-8')) # 调用此update方法对参数进行加密 bytes类型 # print(ret.hexdigest()) # 得到加密后的结果 定长 # # s3 = 'alex12fdsl,afjsdl;fjksdal;fkdsal;fld;lsdkflas;dkfsda;3' # ret = hashlib.md5() # 创建一个md5对象 # ret.update(s3.encode('utf-8')) # 调用此update方法对参数进行加密 bytes类型 # print(ret.hexdigest()) # 得到加密后的结果 定长 # # # 无论字符串多长,返回都是定长的数字, # # 同一字符串,MD5值相同.
#闲人: 将你常用的密码 000000 111111 890425
# #对应关系表:
# # 000000 c108971251713ee7c59db5c097378018
# # 撞库: 因为撞库,所以相对不安全,如何解决?
# # 123456 e10adc3949ba59abbe56e057f20f883e
s4 = '123456' # # ret = hashlib.md5() # 创建一个md5对象 # # ret.update(s4.encode('utf-8')) # # print(ret.hexdigest()) # e10adc3949ba59abbe56e057f20f883e #
解决方式 加盐
# s3 = '123456' # ret = hashlib.md5('@$1*(^&@^2wqe'.encode('utf-8')) # 创建一个md5对象,加盐 # ret.update(s3.encode('utf-8')) # 调用此update方法对参数进行加密 bytes类型 # print(ret.hexdigest()) # 得到加密后的结果 定长 c5f8f2288cec341a64b0236649ea0c37
如果黑客盗取到你的固定盐 '@$1*(^&@^2wqe'内容 # 变成随机的盐: # username = '爽妹' # password = '123456' # ret = hashlib.md5(username[::-1].encode('utf-8')) # ret.update(password.encode('utf-8')) # print(ret.hexdigest())
sha 系列
hashlib.sha1() # sha1 与md5 级别相同,但是sha1比md5 更安全一些, # ret = hashlib.sha1() # ret.update('123456'.encode('utf-8')) # print(ret.hexdigest()) # 7c4a8d09ca3762af61e59520943dc26494f8941b # ret = hashlib.sha512() #级别最高,效率低,安全性最大 # ret.update('123456'.encode('utf-8')) # print(ret.hexdigest()) # ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8
c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413
文件的校验
对于小文件可以,但是超大的文件内存受不了,(下面具体代码解决
# def func(file_name): # with open(file_name,mode='rb') as f1: # ret = hashlib.md5() # ret.update(f1.read()) # return ret.hexdigest() # # print(func('hashlib_file')) # print(func('hashlib_file1')) # s1 = 'I am 旭哥, 都别惹我.... 不服你试试' # ret = hashlib.md5() # ret.update(s1.encode('utf-8')) # print(ret.hexdigest()) # 15f614e4f03312320cc5cf83c8b2706f # s1 = 'I am 旭哥, 都别惹我.... 不服你试试' # ret = hashlib.md5() # ret.update('I am'.encode('utf-8')) # ret.update(' 旭哥, '.encode('utf-8')) # ret.update('都别惹我....'.encode('utf-8')) # ret.update(' 不服你试试'.encode('utf-8')) # print(ret.hexdigest()) # 15f614e4f03312320cc5cf83c8b2706f # def func(file_name): # with open(file_name,mode='rb') as f1: # ret = hashlib.md5() # while True: # content = f1.read(1024) # if content: # ret.update(content) # else: # break # return ret.hexdigest() # print(func('hashlib_file')) # print(func('hashlib_file1')) # hashlib
#用在 密文,或者文件的校验.
# md5
#普通的
#加盐的
#动态加盐的
#sha 系列
# 普通的
# 加盐的
# 动态加盐的
# md5
#普通的
#加盐的
#动态加盐的
#sha 系列
# 普通的
# 加盐的
# 动态加盐的
#文件的校验:
# 小文件
# 大文件
# 小文件
# 大文件