2017-02-18 80 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)))))