真空拔罐器 发表于 2020-3-12 19:36:13

交作业了,简单的文件加密解密脚本

简单的文件加密解密,鱼油们多多指点!

真空拔罐器 发表于 2020-3-13 18:22:01

优化了一下~

import os
import easygui as g
import random as r
import pickle as p
import sys

#定义一个文件类
class File:
    dict = {}
    def __init__(self,path):
      self.dir = os.path.dirname(path)
      self.name = os.path.splitext(os.path.basename(path))
      self.ext = os.path.splitext(os.path.basename(path))
      self.newname = ''.join(r.sample('qwertyuiopasdfghjklzxcvbnm&^$@#%1234567890',8))#改变文件名,障眼法
    def getDict(self):
      return self.dict   
    def setDict(self,ext):#将相关信息存入字典便于索引
      self.dict = {'dir' : self.dir,'name' : self.name,'ext' : self.ext,'newname' : self.newname,'newext' : ext}
    def delDict(self):
      del self.dict
    x = property(getDict,setDict,delDict)
def en_decryption(path):#加解密函数
    with open(path,'rb+') as f:
      old = f.read()
      new = old[::-1]      
      f.seek(0)
      f.write(new)#反转文件使其无法被识别,同样操作即可解密
try:
    with open('table.pkl','rb') as s:
      filelist = list(p.load(s))
except EOFError:
    filelist = []
if g.passwordbox('请输入密码','文件加密解密') == '12345nlx':
    while True:
      if g.boolbox('选择要进行的操作','文件加密',choices = ('加密','解密')):
            try:
                path = g.fileopenbox('请选择文件','文件加密')
                f = File(path)
                os.chdir(f.dir)
            except TypeError:
                break
            f.x = g.choicebox('请选择加密文件的拓展名','文件加密',choices = ('.txt','.mp4','.DLLs','.Doc','.mp3'))
            if f.x == None:#选择拓展名伪装
                break
            else:
                c = '判断'
                for each in filelist:#判断文件是否已加密
                  if f.x['name'] == each['newname']:
                        c = g.choicebox('文件已加密,是否重新选择文件?','文件加密',choices = ('是','否'))
                        break
                if c == '是':
                  continue
                elif c == '否':
                  break         
                elif c == '判断':
                  g.msgbox('文件加密中......','文件加密')
                  en_decryption(path)#加密
                  os.rename(os.path.basename(path),f.x['newname'] + f.x['newext'])
                  os.chdir(sys.path)
                  filelist.append(f.dict)#将加密文件存入已加密列表
                with open('table.pkl','wb')as s:
                  p.dump(filelist,s)#存入pickle
                if g.boolbox('加密完成,是否退出程序','文件加密'):
                  break
      else :
            if filelist == []:
                g.textbox('提示','文件解密',text = '未找到加密文件')
                ifg.boolbox('是否退出程序','文件解密'):
                  break
                else:
                  continue
            else:
                try:
                  for each in g.multchoicebox('搜索到已加密文件如下,请选择要解密的文件','文件解密',choices = filelist):
                        for file in filelist:
                            if each == str(file):
                              g.textbox('文件解密','文件解密',text = '文件%s解密中,请不要退出程序......'%(file['name'] + file['ext']))
                              os.chdir(file['dir'])
                              try:
                                    en_decryption(file['newname'] + file['newext'])#解密
                                    os.rename(file['newname'] + file['newext'],file['name'] + file['ext'])#重命名
                                    
                                    filelist.remove(file)#解密后将文件从已加密列表中删除
                              except FileNotFoundError:
                                    g.msgbox('检测到文件路径已改变,请自行选择加密文件','文件解密')#路径检测
                                    try:
                                        path = g.fileopenbox('请选择文件','文件解密')
                                        f = File(path)
                                        for file in filelist:
                                          if f.name == file['newname']:
                                                os.chdir(f.dir)
                                                g.textbox('文件解密','文件解密',text = '文件%s解密中,请不要退出程序......'%(file['name'] + file['ext']))
                                                en_decryption(file['newname'] + file['newext'])#解密
                                                os.rename(file['newname'] + file['newext'],file['name'] + file['ext'])#重命名
                                                filelist.remove(file)
                                    except TypeError:
                                        break
                              break
                except TypeError:
                  break
                os.chdir(sys.path)
                with open('table.pkl','wb')as s:
                  p.dump(filelist,s)#存入pickle
                if g.boolbox('解密完成,是否退出程序','文件解密'):
                  break
else:
    g.msgbox('密码错误!程序退出','文件加密解密')
g.msgbox('谢谢使用','文件加密解密')
   

   
   

页: [1]
查看完整版本: 交作业了,简单的文件加密解密脚本