day25 hashlib模块与configparser模块与logging模块 https://www.cnblogs.com/jin-xin/articles/9265561.html

3.1 hashlib 加密,摘要算法.
    3.2 configparser 配置文件  了解!
        #配置文件:
        # 放置一些常用的变量,路径.
        # with open('hashlib_file')
        '''
        ;path1 = 'c:\user\app01\ user1表'
        ;path2 = 'c:\user\app01\ user2表'
        ;path3 = 'c:\user\app01\ user3表'
        ;PAI = 3.1415925
        ;LANGRAGE = 'CHINA'
        '''
    3.3 logging模块.
 
 
1
# hash: 算法, 结果是什么? 是内存地址,
# print(hash('123'))
# dic = {'name':'alex'}
# print(hash('name'))
# print(id('name'))
# hashlib 模块 与加密相关,被称作 摘要算法.
# 1,是一堆算法的合集,他包含很多算法(加密的).
# 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 系列
    # 普通的
    # 加盐的
    # 动态加盐的
#文件的校验:
    # 小文件
    # 大文件
posted @ 2018-07-10 09:16  山东张铭恩  阅读(140)  评论(0编辑  收藏  举报