# hash: 算法, 结果是什么? 是内存地址,
# print(hash('123'))
# dic = {'name':'alex'}
# print(hash('name'))
# print(id('name'))
# hashlib 模块 与加密相关,被称作 摘要算法.
# 1,是一堆算法的合集,他包含很多算法(加密的).
# 2,hashlib的过程就是将字符串转化成---->数字的过程.
# 3,hashlib对相同的字符串转化成的数字相同.
# 4,不同的电脑,对相同的字符串进行 加密 转化成的数字相同.
# 用在哪里?
# 密文(密码).
# 将密码用算法加密放置到数据库,每次取出验证.
# 文件的校验.
# 初识 hashlib
# import hashlib
#md5 加密算法 常用算法, 可以满足一般的常用的需求
#sha 加密算法 级别高一些, 数字越大级别越高,加密的效率越低,越安全.
#md5
# s1 = '12343254'
# ret = hashlib.md5() # 创建一个md5对象
# ret.update(s1.encode('utf-8')) # 调用此update方法对参数进行加密 bytes类型
# print(ret.hexdigest()) # 得到加密后的结果 定长
# 无论字符串多长,返回都是定长的数字,
# 同一字符串,MD5值相同.
# 解决方式:加盐.
# s3 = '123456'
# ret = hashlib.md5('aqwe'.encode('utf-8')) # 创建一个md5对象,加盐
# ret.update(s3.encode('utf-8')) # 调用此update方法对参数进行加密 bytes类型
# print(ret.hexdigest()) # 得到加密后的结果 定长 c5f8f2288cec341a64b0236649ea0c37
# 随机的盐:
# 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
sha也有加盐,动态加盐
# 文件的校验
# 对于小文件可以,但是超大的文件内存受不了,(下面具体代码解决)
# 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'))
# 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'))
大文件可以拆开读,加密结果一样
# 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