2011-12-17 63 views
0

我有一個數據庫存儲在不同文件頭的內存中。我想測試一個給定文件的簽名,例如一個.jpg到數據庫中的簽名。如何將文件簽名與簽名數據庫進行比較?

考慮到這種情況,要測試的文件的簽名是FFD8FFE0,但是在數據庫中,只有部分匹配的FFD8FF簽名,有時候數據庫也有FFD8簽名,但是對於不同的類型,但是具有相同的文件格式。 如何正確檢索測試文件的正確匹配簽名?

我寫了下面的函數,但它並不適用於所有文件格式。

public static boolean searchSignature(File file, List<FileSignature> db) throws FileNotFoundException, IOException { 

     byte[] buffer = new byte[MAX_SIGNATURE_SIZE]; 
     InputStream in = new FileInputStream(file); 
     int n = in.read(buffer, 0, MAX_SIGNATURE_SIZE); 
     String hex = toHex(buffer); 
     boolean b = true; 

     // for each signature in the database, compare it with file's siganture 
     for (FileSignature fs : db) { 
      if (!fs.getSignature().contains(hex)) { 
       b = false; 

      } 
     } 
     return b; 
    } 
+0

簡短評論:你應該關閉()你的輸入流! – fge 2011-12-17 10:26:55

+0

另外,你使用`contains()`:它將匹配字符串中的任何地方。你確定你不是指`startsWith()`,即`hex.startsWith(fs.getSignature())`? – fge 2011-12-17 10:27:46

回答

1

你的條件應該是

if (hex.startsWith(fs.getSignature()) 

由於六角長於從DB簽名。

如果您同時擁有FFD8FF和FFD8,則無法區分長簽名和短簽名。

相關問題