2017-02-18 77 views
1

我正在处理一个小的Clojure项目,我需要能够从一个纯字符串生成NTLMv2哈希。该值将用于填充openLDAP实例中的sambaNTPassword字段。我预计这将涉及到调用一些Java库来完成繁重任务,并从这个java example开始。然而,结果看起来不正确,我看到一些表明jcifs可能不是NTLMv2的好解决方案的帖子。生成NTLMv2哈希和验证

所以我有两个问题

  1. 有谁知道一个简单的脚本,我可以用它来生成NTLMv2的哈希其作为检查脚本即比较,我从我的解决方案得到输出我可以用。

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

回答

2

实际上找到了我的问题的答案,更多的搜索和更多的调试我的Clojure。我想在这里发布它,以防万一它对别人有用。

最后部分首先 - 找到一个基于Web的NTLMv2哈希生成器,所以能够使用它来验证我的输出。见Browserling NTLM Hash Generator

现在,我的解决方案。我结束了让jcifs工作正常。将jcifs.jar安装到我的本地maven仓库中(使用lein-localrepo)之后,它非常容易 - 真的认为我更喜欢使用Clojure,即使大部分代码已经在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)))))