如何以编程方式销毁/使文件不可读

时间:2014-04-15 06:00:21

标签: c# vb.net

虽然我正在使用vb编程做一些事情,但我遇到了一个损坏且无法读取的pdf文件。现在,我只是想知道是否有可能以编程方式创建一个不可读的文件?

我实际拥有它,当我打开文件时它说“打开此文档时出错。读取此文档时出现问题(14)”

现在,我想要实现的是如何“销毁”文件。任何类型的文件。假设我有一个可以通过Adobe Reader打开的工作pdf文件,如何让它“不可读”到Adobe Reader,这样当我打开它时,它会显示一些消息框说“错误打开文件”或类似的东西..这里是示例link

4 个答案:

答案 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();  
            }  
         }  
       }  
   }  
}