萌新发帖,希望大家多多批评指正!
说明:
严重声明!!!萌新第一次写,肯定有bug,用了之后没法还原,概不负责。所以千万不要用于重要文件!
1,不要重复加密,否则覆盖了加密的文件就会导致文件没法复原
2,文件夹不能是纯数字,可能会和编号重复导致BUG。
3,文件总数1000以内# -*- coding: utf-8 -*-
import os
#加密-遍历目录里所有文件,并将其编号,保存文件编号,文件名和文件前20字节到“16.txt”文件里,
# 然后重命名原文件名为其编号
def encryption(dir):
i=1
for root, dirs, files in os.walk(dir):
for file in files:
fdir=os.path.join(root,file)
if file !='Thumbs.db':
with open (fdir,'rb') as f:
f.seek(0,0)
m=f.read(20)
with open ('16.txt','ab+') as ff1:
k=ff1.write(str.encode(str(i)) +b'--'+str.encode(file)+b'--'+m+b'\n')
with open (fdir,'rb+') as ff2:
ff2.seek(0,0)
ff2.write(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
os.rename(fdir,os.path.join(root,str(i)))
print('加密完',str(i),'文件')
i+=1
#解密
def decryption(dir):
ii=1
for root, dirs, files in os.walk(dir):
for file in files:
fdir=os.path.join(root,file)
if file.isdigit():
l=0
m=''
with open ('16.txt','rb') as fl:
lines=fl.readlines()
####################################################
newline = []
for i,line in enumerate(lines):
if len(line)<20:
cur=newline.pop()
newline.append(cur+lines)
else:
newline.append(line)
lines=newline
####################################################
for line in range(1,int(file)+1):
m=lines[line-1]
l=l+len(m)
with open ('16.txt','rb') as f1:
f1.seek(l-21,0)
k=f1.read(20)
f1.seek(l-len(m)+3,0)
sname=f1.read(len(m)-26)
sname=bytes.decode(sname)
if int(file) > 9:
sname=sname[1:]
if int(file) > 99:
sname=sname[1:]
if int(file) > 999:
sname=sname[1:]
with open (fdir,'rb+') as ff1:
ff1.seek(0,0)
ff1.write(k)
os.rename(fdir,os.path.join(root,sname))
print('解密完',str(ii),'文件')
ii+=1
def 加密(password,dir):
if password=='不要重复加密,文件夹不能有纯数字的,已备份并清空了备份数据':
encryption(dir)
else:
print('请认真读说明!')
def 解密(dir):
decryption(dir)