hashlib

1.hashlib模块

1)什么是摘要算法:主要特征是加密过程中不需要私密的钥匙;并且经过加密的文件不能被解密;只有输入相同的明文数据信息摘要算法才能得到相同的密文;适合分布式网络;

Python的hashlib中常见的摘要算法为MD5,SHA1

所以摘要算法又称哈希算法,散列算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常16进制的字符串的表示),是单向转换,不可逆;

2)为什么要对文件加密:首先了解一个专业名词

  SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。例如一些影视网站的vip会员密码的泄露,大多都是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入;

防治这种情况的几种方法:

防治方案

3)md5算法

特点:对同一个字符串,每次运行的值都一样,对应不同字符串,对应的值一定不一样;

  是一个32位的字符串,每个字符都是一个十六进制,效率快,算法相对简单

代码展示:

import hashlib
s = 'alex666'
md5_obj = hashlib.md5()
md5_obj.update(s.encode('utf-8'))
res = md5_obj.hexdigest()
print(res)
#update里的参数必须是bytes类型的,

4)sha1算法

特点:跟md5一样,只是他是一个40位的字符串,算法相对复杂,安全性高,但是效率慢

5)用户机密文件过程中牵扯的问题

import hashlib
username = input('>>>:')
password = input('>>>:')
md5_obj = hashlib.md5(username.encode('utf-8'))
#动态加盐,把用户名作为一个参数与密码一起运算,形成加密文件,安全性高
md5_obj.update(password.encode('utf-8'))
res = md5_obj.hexdigest()
print(res)

 6)文件的一致性校验

a:文件下载和安装过程中,都会带一个md5的一个校验码,如果下载或安装过程中如果发生数据丢失,就不会安装或下载成功;

b:文件校验的代码:

import hashlib
ret_file = os.path.dirname(__file__)
autul_file1 = '/'.join([ret_file,'Admin','Teacher'])
autul_file2 = '/'.join([ret_file,'Admin','Student'])
md5_obj1 = hashlib.md5()
with open(autul_file1,'rb')as f:
    md5_obj1.update(f.read())    #update方法参数必须为bytes类型,所以打开文件要用rb模式
    ret_ram = md5_obj1.hexdigest()

md5_obj2 = hashlib.md5()      #要重新创建一个对象,一个对象对应一个加密值
with open(autul_file2,'rb')as f1:  #这里要是字节模式,因为
    md5_obj2.update(f1.read())
    ret_ram2 = md5_obj2.hexdigest()
print(ret_ram == ret_ram2 )
print(ret_ram)
print(ret_ram2)
#结果:

True
4ff772b41b4067f9c2d047588232a09e
4ff772b41b4067f9c2d047588232a09e

 

原文地址:https://www.cnblogs.com/0627zhou/p/9452014.html