Как сгенерировать хэш Aho-Corasick

Недавно я начал разрабатывать антивирусное программное обеспечение с открытым исходным кодом, хотя хэши генерируются с помощью алгоритма Aho-Corasick.

Я хотел бы знать, как генерировать хэши Aho-Corasick из исполняемых файлов, так как я почти не нашел информации в Интернете по этому поводу.


person James    schedule 08.04.2011    source источник
comment
Чем исполняемые файлы отличаются от строк? Почему вы не можете прочитать исполняемый файл как строку?   -  person David Weiser    schedule 09.04.2011
comment
Извините, я очень новичок в этой области, база данных вирусов предварительно отформатирована как хэши Aho-Corasick, поэтому мне нужно как-то их генерировать   -  person James    schedule 09.04.2011
comment
Не беспокойтесь. :) Я пытался сделать следующее: если вы знаете, как создавать хэши из строк, почему бы просто не прочитать исполняемый файл как строку (данных) и не выполнить алгоритм хэширования для этой строки? Обратите внимание, я имею в виду не тип данных String, а скорее абстрактное понятие строки.   -  person David Weiser    schedule 09.04.2011
comment
Aho-Corasick — это алгоритм поиска любой строки из набора. Алгоритм строит конечный автомат (FA), а затем передает FA искомые данные. Похоже, что база данных содержит построенный FA; в этом случае вам нужно выяснить, как FA представлена ​​в базе данных, реализовать программу для чтения базы данных и имитации FA, а также передать ей файлы, которые вы сканируете.   -  person Andy    schedule 09.04.2011


Ответы (1)


В 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)];
person Margus    schedule 08.04.2011
comment
Разработчики приложений должны обращать внимание только на методы, определенные в этом классе MessageDigest; все методы в суперклассе предназначены для поставщиков криптографических услуг, которые хотят предоставить свои собственные реализации алгоритмов дайджеста сообщений. (источник: download.oracle.com/javase/6 /docs/api/java/security/) - person Margus; 09.04.2011
comment
Насколько я понимаю вопрос, Джеймс хочет поддерживать определенный формат хэшей, и в этом случае MD5 бесполезен. - person Andy; 09.04.2011
comment
@Энди Он не приложил никаких усилий, чтобы показать, что он пытался. Поэтому я показал пример того, как он должен это делать. В моем примере я создал хэш MD5 для файла. Я мог бы подробнее рассказать о том, как создать собственный хэш для дайджеста сообщений, но я не был уверен, понимает ли он вообще Java. MD5 не обязательно должен быть полезным, это просто заполнитель пространства. - person Margus; 09.04.2011