如何以编程方式销毁/使文件不可读
本文关键字:文件 编程 方式销 | 更新日期: 2023-09-27 17:58:16
当我用vb编程时,我遇到了一个损坏且无法读取的pdf文件。现在,我只是想知道是否可以通过编程创建一个不可读的文件?
事实上,我有它,当我打开文件时,它说:"打开这份文件时出错。阅读这份文件时出现问题(14)"
现在,我想实现的是如何"销毁"一个文件。任何类型的文件。假设我有一个可以由Adobe Reader打开的工作pdf文件,如何使其对Adobe Reader"不可读",这样当我打开它时,它会显示一些消息框,上面写着"打开文件时出错"或类似的内容。。这里有一个链接
从技术上讲,除了硬件错误,不存在"不可读"这回事。文件包含字节。它是可读的。然而,PDF阅读器期望这些字节具有特定的格式。如果没有,程序将无法从中生成有效的pdf。
想象一张纸给一个演员读。如果你撕下了的一半,另一页就很难阅读。只是演员会抱怨,他不会只演半个剧本。
您可以覆盖文件中的字节。如果你的文件是一个500字节的文件,可以解释为pdf,你可以把它变成一个有2个字节的文件。那么它就是一个两字节的文件。pdf阅读器会抱怨的。如果你在文本编辑器中打开它,它会显示为"FU"。一个程序是垃圾,另一个程序则是数据。
导致pdf不可读的原因是该文件的格式不是读者期望的格式。对于基本的txt文件来说,没有格式可循,无论有多少字节,屏幕上都会显示什么。你可能会胡言乱语,但它仍然会打开。
要"破坏"文件,您必须破坏文件系统。可能有一些方法可以做到这一点,但你不能用托管代码来做到,你需要调用本机API调用来访问原始文件系统,你需要自己解析文件系统,windows不提供这样的功能。也许可以寻找一个可以读取MRR的开源十六进制编辑器,以帮助确定需要进行哪些调用。(重要提示:如果你尝试这样做,你可能会在实验过程中使计算机无法启动,在开始使用文件系统结构之前备份所有文件)
如果你想为其他人隐藏文件的内容,你可以简单地加密文件。
使用此加密文件:
byte[] keySalt = new byte[] { 0x49, 0x76, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 };
Encrypt("original.txt", "encrypted.txt", "myPassword", keySalt);
public static void Encrypt(string fileIn, string fileOut, string pass, byte[] keySalt)
{
PasswordDeriveBytes pdb = new PasswordDeriveBytes(pass, keySalt);
Rijndael alg = Rijndael.Create();
alg.Key = pdb.GetBytes(32);
alg.IV = pdb.GetBytes(16);
using (FileStream fsOut = new FileStream(fileOut, FileMode.OpenOrCreate, FileAccess.Write))
{
using (FileStream fsIn = new FileStream(fileIn, FileMode.Open, FileAccess.Read))
{
using (BinaryReader br = new BinaryReader(fsIn, Encoding.Default))
{
using (CryptoStream cs = new CryptoStream(fsOut, alg.CreateEncryptor(), CryptoStreamMode.Write))
{
int len = (int)br.BaseStream.Length;
cs.Write(br.ReadBytes(len), 0, len);
cs.FlushFinalBlock();
}
}
}
}
}