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