a1789043588 发表于 2018-8-19 17:12

批量加密文件-文件夹加密器(原理:改写文件前20字节)

萌新发帖,希望大家多多批评指正!
说明:
严重声明!!!萌新第一次写,肯定有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
                  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
                  if int(file) > 99:
                        sname=sname
                  if int(file) > 999:
                        sname=sname
                  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)

dir="你要加密的文件夹,例如J:\"
加密('不要重复加密,文件夹不能有纯数字的,已备份并清空了备份数据',dir)
#解密(dir)

silme 发表于 2018-8-19 18:23

感觉有点麻烦

wushaominkk 发表于 2018-8-20 09:20

请规范代码格式
【公告】发帖代码插入教程
https://www.52pojie.cn/thread-713042-1-1.html

Codeman 发表于 2018-8-20 09:24

不错,学习了,感谢分享

zgqc 发表于 2018-8-20 09:51

非常感谢楼主分享

侧写师 发表于 2018-8-21 13:05

思路不错 试一把

小黑LLB 发表于 2019-2-11 15:39

有趣 支持一下 楼主 感谢分享{:1_921:}
页: [1]
查看完整版本: 批量加密文件-文件夹加密器(原理:改写文件前20字节)