欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()