2014-04-15 29 views
0

雖然我在做一些使用vb編程的東西,但我遇到了一個損壞且無法讀取的pdf文件。現在,我只是想知道是否有可能以編程方式創建一個不可讀的文件?如何以編程方式摧毀/製作無法讀取的文件

我其實有它,當我打開它說的文件「有一個錯誤打開此文檔,讀取此文件(14)中的問題」

現在,我想實現的是如何來「銷燬」一個文件。任何類型的文件。假設我有一個可以通過Adobe Reader打開的工作PDF文件,如何使它對Adobe Reader「無法讀取」,這樣當我打開它時,它會顯示一些messagebox說「錯誤打開文件」或類似的東西..這裏是一個例子link

+0

您無法使文本文件無法讀取。你爲什麼不刪除文件。 –

+0

@ david對不起,也許我做了一個錯誤的例子,等待我編輯我的問題 – Codemunkeee

+1

一個文件只是*腐敗*給一個特定的讀者,它無法理解它。使用記事本,你幾乎可以打開任何東西。 –

回答

0

如果你想隱藏他人的文件內容,你可以簡單地加密文件。

4

從技術上講,缺少硬件錯誤,沒有「不可讀」之類的東西。一個文件包含字節。它是可讀的。但是,PDF閱讀器期望這些字節串具有特定的格式。如果沒有,該程序不能從其中生成有效的PDF。

想象一張讓演員閱讀的紙。如果你撕開了頁面的一半,另一頁遠不可讀。只是這個演員會抱怨,他不會只在一半的劇本中扮演他的角色。

您可以覆蓋文件中的字節。如果你的文件是一個500字節的文件,可以解釋爲PDF格式,你可以改爲使用2個字節來表示「FU」。然後它是一個兩字節的文件。 PDF閱讀器會投訴。如果您在文本編輯器中打開它,它會讀取「FU」。一個程序垃圾是另一個程序數據。

+0

+1,類比肯定是明確的。這也是我的想法。這是我想到的概念,只是我想將它轉換爲程序。我還沒有精通編程(至今只有6個月的經驗)。現在閱讀本文後,我只是想我的問題幾乎是毫無意義的XD – Codemunkeee

+0

但是也許我仍然可以對文件做些什麼,比如閱讀文件到它打破的地方。 – Codemunkeee

1

是什麼導致pdf不可讀是文件不符合讀者期望的文件格式。對於基本的txt文件,沒有可以遵循的格式,無論字節是什麼都顯示在屏幕上。你可能會得到亂碼,但它仍然會打開。

要「打破」文件,您將不得不中斷文件系統。可能有辦法做到這一點,但你不能用託管代碼來做到這一點,你需要調用本地API調用來訪問原始文件系統來做到這一點,並且你需要自己解析文件系統,而Windows不提供任何東西像那樣。也許尋找一個開源的十六進制編輯器可以讀取MRR,以幫助確定您需要創建哪些調用。 (重要提示:如果您嘗試這個,你將有可能你在實驗過程中讓你的電腦未啓動,備份所有文件,你開始與文件系統結構播放前)

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(); 
      } 
     } 
     } 
    } 
} 
相關問題