如何在不删除文件的情况下销毁文件内容

如何在不删除文件的情况下销毁文件内容

我的目标是让文件保持原始大小,但无法在各自的软件(如 MS Office Word)中打开(或恢复)。我的目的是模拟文件的存在,但我不想共享任何文件内容。理想情况下文件内容应该用随机字节完全覆盖而文件大小应与原始大小保持不变。

我知道有时可以使用十六进制编辑器甚至记事本来完成此操作,只需更改几个字节,文件就会变得不可用。但对于某些格式(如图像和音频),它可能并不总是有效,这些格式仍然可以打开,但会出现瑕疵。

对于最好奇的用户仍然要求我回答这个问题“你为什么需要这个?”- 我需要这个,因为我不想与那些强迫我共享文件的人分享我的开发成果。有时你只是需要。你可以想到许多其他用例 - 模拟文件复制或备份操作的有效负载,或者测试你开发的软件是否可以优雅地处理垃圾。

我测试过许多安全粉碎实用程序,它们能够用随机数据覆盖文件,但之后这些文件会被删除。我没有看到关闭删除步骤的选项。如果有这样的选项,那将是一个解决方案。

答案1

我写了一个快速方法,利用随机数据文件创建器

Mike 指出,RDFC 无法正确地用随机数据填充文件。我已通过电子邮件向作者报告了此问题。目前,我已经实施了替代rdfc.exe。如果你想编译并使用它,请参阅如何从源代码编译项目?

此 Windows 命令行脚本将执行您想要的操作:

@ECHO OFF
SETLOCAL
IF "%1"=="" GOTO missingParam
GOTO :begin

:missingParam
ECHO Missing target. Use %~nx0 [DRIVE:\]DIRECTORY
GOTO :eof

:begin
SET RDFC=%CD%\rdfc.exe
PUSHD %1
CALL :treeProcess
POPD
ENDLOCAL
GOTO :eof

:treeProcess
FOR %%f IN (*.*) DO (
  ECHO | SET /P=Shredding %%f... 
  %RDFC% %%f %%~zf B overwrite > NUL
  ECHO %%~zf random bytes written.
)
FOR /D %%d IN (*) DO (
    CD %%d
    CALL :treeProcess
    CD ..
)
EXIT /B

它要求将文件rdfc.exe放在与脚本相同的目录中。脚本将需要 1 个参数,即目标目录。目标目录中的每个文件都将被替换为大小完全相同但填充了随机数据的文件。

在此处输入图片描述

答案2

电源外壳

不需要外部工具。作为额外功能,它保留了 LastWrite 时间。其他时间不会改变。

# Get file as item to access content and file dates
$file = Get-Item "C:\Users\Nixda\Desktop\input.txt" 

# Save write time to temp variable for later use
$oldWriteTime = $file.LastWriteTime 

# Create an empty array of the same size as your file size in bytes
$content = New-Object Byte[] $file.length 

# Fill the array using a System.Random object. Here is the magic
(New-Object Random).NextBytes($content)

# Write the array to the same file with System.IO.File
[IO.File]::WriteAllBytes($file,$content)

# Set back old write time
$file.LastWriteTime = $oldWriteTime

在此处输入图片描述

在此处输入图片描述

灵感

答案3

bcrypt 可以正常工作。在 cygwin 中构建它,并将 cygwin dll 放在 usb pendrive 上。

编辑:或者更简单地通过使用您选择的密钥对它们进行异或来混淆它。这至少可以保留文件大小。如果您有很多文档并且只是想快速完成,则无需从文件开头更改超过 8 个字节(最多 1 kb)。不久前有一些勒索软件这样做了。我显然不是密码学家,但筛选文件以得出用于混淆它们的密钥是非常无聊的工作。或者使用 dd(来自适用于 Windows 的 unxutils.sf.net):$ dd conv=swab if=infile of=outfile 在您的文档中循环。警告:像这样使用 dd 会让您看起来很傻。相同的命令将逆转该过程。

相关内容