Создать NTLMv2-хэш и проверку
Я работаю над небольшим проектом Clojure, где мне нужно иметь возможность генерировать хеш NTLMv2 из простой строки. Это значение будет использоваться для заполнения поля sambaNTPassword в экземпляре openLDAP. Я ожидал, что это потребует от некоторых Java-библиотек тяжелой работы, и я начал с этого примера Java. Тем не менее, результаты не выглядят правильно, и я видел некоторые сообщения, которые указывают, что jcifs не может быть хорошим решением для NTLMv2.
Итак, у меня есть два вопроса
Кто-нибудь знает простой скрипт, который я могу использовать для генерации NTLMv2-хэшей, который я мог бы использовать в качестве контрольных скриптов, т.е. сравнить с выводом, который я получаю из своего решения.
Какие-нибудь предложения относительно других библиотек Java, которые могли бы быть лучше для этой задачи?
1 ответ
На самом деле нашел ответ на оба моих вопроса, немного углубившись в поиск и отладку моего Clojure. Я решил опубликовать это здесь на всякий случай, если это пригодится кому-то еще.
Первая часть первая - нашел веб-генератор хеша NTLMv2, поэтому смог использовать его для проверки моих выводов. См. Browserling NTLM Hash Generator.
Теперь мое решение. Я закончил тем, что заставил JCIF работать нормально. После установки jcifs.jar в мой локальный репозиторий Maven (с использованием lein-localrepo) это стало чрезвычайно просто - действительно, думаю, я предпочитаю использовать Clojure, даже когда большая часть кода уже написана на Java. Я не эксперт по уловкам, но это должно быть достаточно ясно (я надеюсь)
(ns cifs-clj.core
(:import [jcifs.util Hexdump MD4])
(:gen-class))
(defn hash-nt-password [pwd]
(let [pwd-bytes (.getBytes pwd "UnicodeLittleUnmarked")
md4 (doto (MD4.)
(.engineUpdate pwd-bytes 0 (alength pwd-bytes)))
hash-bytes (.engineDigest md4)]
(Hexdump/toHexString hash-bytes 0 (* 2 (alength hash-bytes)))))