Создать NTLMv2-хэш и проверку

Я работаю над небольшим проектом Clojure, где мне нужно иметь возможность генерировать хеш NTLMv2 из простой строки. Это значение будет использоваться для заполнения поля sambaNTPassword в экземпляре openLDAP. Я ожидал, что это потребует от некоторых Java-библиотек тяжелой работы, и я начал с этого примера Java. Тем не менее, результаты не выглядят правильно, и я видел некоторые сообщения, которые указывают, что jcifs не может быть хорошим решением для NTLMv2.

Итак, у меня есть два вопроса

  1. Кто-нибудь знает простой скрипт, который я могу использовать для генерации NTLMv2-хэшей, который я мог бы использовать в качестве контрольных скриптов, т.е. сравнить с выводом, который я получаю из своего решения.

  2. Какие-нибудь предложения относительно других библиотек 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)))))
Другие вопросы по тегам