使用ccleaner的时候有一个安全擦除MFT的选项,发现速度奇慢,而且可定制性很差
所以自己用python写了一个小程序来擦除数据
原理是通过产生文件覆盖空闲空间,然后删除这些文件,来实现原来残留文件的不可恢复,从而使数据恢复软件失效,来确保已删除(清空回收站之后)的数据的安全
理论上设置size=1000000,便不可恢复1MB以上的文件;设置1000,便不可恢复1KB以上的文件
先上效果图
代码如下:
import os,win32file,shutil def getpath(): try: return os.path.abspath('.') except: return 400 def getfreecapcity(path): try: sectorsPerCluster, bytesPerSector, numFreeClusters, totalNumClusters =win32file.GetDiskFreeSpace(path) return numFreeClusters * sectorsPerCluster * bytesPerSector #Bytes except: return 401 def mkfolder(name): try: os.mkdir(name) print '0' return 0 except: return 402 def rmfolder(name): try: shutil.rmtree(name) return 0 except: return 403 def mkfill(fillname,size,mode): try: f=open(fillname,'w') f.write(mode*size) f.close();return 0 except: return 404 def empty(size,mode,workspace): 'size:filesize,mode:fillcontext,workspace:tempfolder' print mkfolder(workspace) path=getpath();print path size_limit=len(mode*size)+200 fname=-1 getfreecapcity(path) while long(getfreecapcity(path))>size_limit: fname+=1 mkfill(workspace+'\\'+str(fname),size,mode) print rmfolder(workspace) return 0 def emptyplus(times=3,size=1000,mode='z',workspace='EmPtYmFt'): 'size:filesize(default=1kB),mode:fillcontext,workspace:tempfolder' while times>0: times-=1 empty(size,mode,workspace) return 'done!' if __name__=='__main__': print emptyplus() raw_input('ENTER TO EXIT.')
原文地址:http://blog.csdn.net/awsxsa/article/details/43709859