Python 内置模块 加密,导入,压缩
程序员文章站
2024-03-14 17:13:52
...
一.hashlib模块:用于加密相关操作,3.x里代替了md5/sha模块
主要提供摘要算法(SHA1,SHA224,SHA256,SHA384,SHA512,MD5)
只能把明文转换成密文,无法反向操作—非加密算法
import hashlib
m=hashlib.md5()# m=hashlib.sha256() #获取一个md5/sha256加密算法对象
m.update('hello'.encode('utf8')) #制定需要加密的字符串,编码并加密
print(m.hexdigest()) #5d41402abc4b2a76b9719d911017c592 #获取加密后的16进制字符串,这个字符串定长且二者一一对应
m.update('alvin'.encode('utf8')) #这一步在hello的基础上进行
print(m.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af
m2=hashlib.md5()
m2.update('helloalvin'.encode('utf8'))
print(m2.hexdigest()) #92a7e713c30abbb0319fa07da2a5c4af
以上加密算法存在缺陷:通过撞库可以反解
有必要对加密算法中添加自定义key(加盐,即添加1个随机str)
import hashlib
m3=hashlib.md5('2i3uuidahi'.encode('utf-8'))
m3.update('helloalvin'.encode('utf-8'))
hash = hashlib.sha256('898oaFs09f'.encode('utf8'))
hash.update('alvin'.encode('utf8'))
用户登录程序:
import hashlib
db = {}
#计算密码的md5值
def get_md5(s):
md = hashlib.md5()
md.update(s.encode('utf-8'))
return md.hexdigest()
#注册新的用户
def register(username,password):
db[username] = get_md5(password + username + 'SSC')
#验证用户登录
def login(username,password):
if not username in db:
print('User is not exist!')
return
if db[username] == get_md5(password + username + 'SSC'):
print('Login sucessfully')
else:
print('Incorrect password')
#主程序
if __name__ == '__main__':
user1 = 'xiaoming'
psw1 = '123456'
register(user1,psw1) #注册新用户
login(user1,psw1) #登录成功 #Login sucessfully
login(user1,psw1+' ') #密码错误,登录失败 #Incorrect password
login(user1+' ',psw1) #用户名错误,登录失败 #User is not exist!
python 还有一个 hmac 模块,它内部对我们创建key和内容再进行处理然后再加密:
import hmac
h = hmac.new('alvin'.encode('utf8'))
h.update('hello'.encode('utf8'))
print (h.hexdigest())#320df9832eab4c038b6c1d7ed73a5940
二.importlib模块:动态导入模块
- 一般不建议使用__import__()导入模块:其行为在python2和python3中有差异,会导致意外错误
import importlib
import_module('module'):动态导入模块
>>> a=importlib.import_module('math')
>>> print(a.pi)
#结果:
3.141592653589793
reload('module'):重新加载模块
三.zipfile模块:压缩相关操作
z=zipfile.ZipFile('topath/zip_name','mode')
#创建一个zip格式的压缩文件对象
#参数说明:
#topath:得到的压缩文件的位置;默认为当前目录
#zip_name:指定zip文件的名字
#mode:指定独写模式,进行压缩时mode应设为'w'
z1=zipfile.ZipFile('G:/','w')
z1.write('file')
#参数说明:
#将file中的内容写入z;会连文件所在的路径一起拷贝(盘符除外)
z1.close()
z=zipfile.ZipFile('path/zip_name','mode')
#打开一个压缩文件对象,以进一步解压缩
#参数说明:
#path/zip_name:要打开的压缩文件对象
#mode:指定独写模式,进行解压缩时,应设为'r'
z2.zipfile.ZipFile('G:/a.zip','r')
z2.extractall('path')
#解压缩z2
#参数说明:
#path:指定把文件解压缩到哪里;如果不存在,创建
z2.close()
上一篇: Java实现AES对称加密算法
下一篇: java实现AES对称加密