生成NTLMv2哈希和验证

时间:2017-02-18 05:40:40

标签: java hash clojure ntlmv2

我正在开发一个小型Clojure项目,我需要能够从普通字符串生成NTLMv2哈希。该值将用于填充openLDAP实例中的sambaNTPassword字段。我预计这将涉及调用一些Java库来完成繁重的工作并从这个java example开始。但是,结果看起来不对,我看到一些帖子表明jcif可能不是NTLMv2的好解决方案。

所以我有两个问题

  1. 有没有人知道我可以用来生成NTLMv2哈希的简单脚本,我可以将其用作检查脚本,即与我从解决方案中获得的输出进行比较。

  2. 对其他Java库的任何建议可能更适合此任务?

1 个答案:

答案 0 :(得分:2)

实际上找到了我的问题的答案,更多的搜索和更多的Clojure调试。我想把它贴在这里,以防它对其他人有用。

最后一部分 - 找到一个基于Web的NTLMv2哈希生成器,因此能够使用它来验证我的输出。请参阅Browserling NTLM Hash Generator

现在,我的解决方案。我最终让jcifs工作得很好。在将jcifs.jar安装到我的本地maven repo(使用lein-localrepo)之后,这非常简单 - 即使大多数代码已经在Java中,我确实认为我更喜欢使用Clojure。我不是专家,但这应该是相当明确的(我希望)

(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)))))