虽然我正在使用vb编程做一些事情,但我遇到了一个损坏且无法读取的pdf文件。现在,我只是想知道是否有可能以编程方式创建一个不可读的文件?
我实际拥有它,当我打开文件时它说“打开此文档时出错。读取此文档时出现问题(14)”
现在,我想要实现的是如何“销毁”文件。任何类型的文件。假设我有一个可以通过Adobe Reader打开的工作pdf文件,如何让它“不可读”到Adobe Reader,这样当我打开它时,它会显示一些消息框说“错误打开文件”或类似的东西..这里是示例link
答案 0 :(得分:4)
从技术上讲,没有硬件错误,就没有"不可读"。一个文件包含字节。它的可读性。但是,PDF阅读器希望这些字节具有特定的格式。如果没有,程序无法从中生成有效的pdf。
想象一张演员要读的纸。如果你翻了一半的页面,那么另一页很难被读取。这只是演员会抱怨,他只在半个剧本中扮演他的角色。
您可以覆盖文件中的字节。如果您的文件是500字节文件,可以解释为pdf,您可以改为使其成为一个2字节的文件,表示" FU"。然后它是一个双字节文件。 PDF格式的读者会抱怨。如果您在文本编辑器中打开它,它将读取" FU"。一个程序垃圾是另一个程序数据。
答案 1 :(得分:1)
使pdf不可读的原因是文件不是读者期望的格式。对于基本的txt文件,没有可以遵循的格式,无论屏幕上显示的是什么字节。你可能会得到胡言乱语,但它仍然会打开。
要“破坏”文件,您必须破坏文件系统。可能有办法实现它,但你不能用托管代码做,你需要调用本机API调用来到原始文件系统来做它你需要自己解析文件系统,windows不提供任何东西像那样。也许找一个可以读取MRR的开源十六进制编辑器来帮助确定你需要做出哪些调用。 (重要说明:如果您尝试这样做,您可能会在实验过程中使计算机无法启动,在开始使用文件系统结构之前备份所有文件)
答案 2 :(得分:0)
如果要隐藏其他人的文件内容,可以直接加密文件。
答案 3 :(得分:0)
使用它来加密文件:
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();
}
}
}
}
}