2011-04-08 69 views
0

我最近開始開發開源抗病毒軟件,雖然哈希是用Aho-Corasick算法生成的。如何生成Aho-Corasick哈希

我很想知道如何產生阿霍Corasick從可執行文件哈希,因爲我發現幾乎沒有任何關於這個

+0

是什麼使可執行文件與字符串不同?爲什麼你不能以字符串的形式讀取可執行文件? – Davidann 2011-04-08 22:59:05

+0

對不起,我對這個領域很陌生,病毒庫已經預格式化爲Aho-Corasick哈希,因此我需要能夠以某種方式生成它們。 – James 2011-04-08 23:05:45

+0

不用擔心。:)我試圖做的一點是:如果你知道如何從字符串創建哈希,爲什麼不只是將可執行文件讀作字符串(數據)並對該字符串執行哈希算法?請注意,我不是指String數據類型,而是「string」的抽象概念。 – Davidann 2011-04-08 23:20:40

回答

0

在Java互聯網上的信息:

private static String readFile(String path) throws IOException { 
    FileInputStream stream = new FileInputStream(new File(path)); 
    try { 
    FileChannel fc = stream.getChannel(); 
    MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); 
    /* Instead of using default, pass in a decoder. */ 
    return Charset.defaultCharset().decode(bb).toString(); 
    } 
    finally { 
    stream.close(); 
    } 
} 

然後就可以使用,以下獲得MD5哈希值

byte[] bytesOfMessage = readFile("filepath").getBytes("UTF-8"); 
MessageDigest md = MessageDigest.getInstance("MD5"); 
String thedigest = Arrays.toString[md.digest(bytesOfMessage)]; 
+0

應用程序開發人員只應注意此MessageDigest類中定義的方法;超類中的所有方法都用於希望提供自己的消息摘要算法實現的加密服務提供者。 (來源:http://download.oracle.com/javase/6/docs/api/java/security/MessageDigest.html) – Margus 2011-04-08 23:15:29

+0

如果我明白這個問題,那麼詹姆斯希望支持一種特定的散列格式,在這種情況下MD5沒有用處。 – Andy 2011-04-08 23:21:52

+0

@安迪他沒有做出任何努力,顯示他的嘗試。所以我舉了一個例子,他應該怎麼做。在我的例子中,我爲一個文件創建了一個MD5散列。我可以詳細闡述如何爲messagedigest製作自定義散列,但我不確定他是否理解Java。 MD5不需要有用,它只是空間填充。 – Margus 2011-04-08 23:40:07