2011-01-12 2 views
1

Кто-нибудь разработал привязки JNI для вызова хэш-функций OpenSSL из Java?Можете ли вы назвать примитивы хэша OpenSSL с Java?

Я знаю, что Java имеет встроенные функции хеширования. Проблема заключается в том, что они работают только на третьей скорости для встроенных реализаций OpenSSL. Существует OpenSSL-Java project on sourceforge, но у него нет файлов для загрузки.

Моя цель здесь на самом деле не вызывать OpenSSL, она должна преодолевать субоптимальную производительность Java относительно хэширования.

+0

Не могли бы вы привести некоторые примеры плохой производительности в реализациях хэширования Java? Это хеширование не имеет ничего общего с аутентификацией, не так ли? При аутентификации вы хотите * медленное * хеширование. –

+3

Вы уверены, что этот бит кода вызывает проблемы с производительностью приложения? Если это не так, вы ничего не получите, сделав это быстрее. – time4tea

+1

@Adam --- Конечно. Я разрабатываю судебное программное обеспечение, которое должно вычислить хэш MD5 для каждого сектора на жестком диске. Так что это примерно 2 миллиарда хэшей 512-байтовых блоков. Мое предыдущее тестирование показало, что Java блокировала хэши на 1/3 скорости как OpenSSL. И да, я уверен, что хэш-скорость является ограничивающим фактором в этом коде. – vy32

ответ

2

Попробуйте https://www.nayuki.io/page/native-hash-functions-for-java они реализуют хеш-функции в c, x86 assembly и x86-64 assembly

увеличена до 1,68 × для SHA-256, но я не вижу никакой разницы, с небольшими файлами.

Так что если вы склонны использовать небольшой файл, я предлагаю придерживаться java.

0

Я твердо верю, что вам нужно написать процедуру C, которая не только рассчитала хэши, но также делает файл IO. Не забывайте использовать IO с отображением памяти для скорости, иначе предельная часть - это копирование буферов.

+1

Если я выполняю как ввод-вывод, так и хеширование на C, то в чем смысл использования Java? – vy32

+0

GUI? Дополнительные функции? Как бы то ни было, в этом случае просто сделайте это в C. – Daniel

+1

Я думаю, что вам не хватает точки моего вопроса. Я хочу сделать это на Java, чтобы один исполняемый файл можно запускать на нескольких платформах. – vy32

-1

Видимо, вы можете, но это из-за JNI, вы не получаете повышение производительности.

Смежные вопросы