2016-09-27 84 views
-1

是可以通過Java來獲得從TDS的用戶密碼以明文的形式? 隨着ldapsearch -v -D cn=root -w xxxxxx -s sub uid=testuser userPassword 我得到以下結果:TDS - 收到的userPassword

enter image description here

的密碼是在這種情況下:Joko2014!

在Java中我有嘗試過:

String[] attrIDs = {".....",....,"userPassword"} 
SearchControls ctls = new SearchControls(); 
ctls.setReturningAttributes(attrIDs); 
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); 

NamingEnumeration<SearchResult> results = ctx.search(name, 
         filter, ctls); 

while (results.hasMore()) { 
    SearchResult entry = results.next(); 
    System.out.println(entry); 
} 

但在控制檯輸出就是:

uid=testuser: null:null:{givenname=givenName: xxxx, sn=sn: xxx, pwdchangedtime=pwdChangedTime: 20160926173016.000000Z, mail=mail: [email protected], uid=uid: testuser, userpassword;binary=userPassword;binary: [[email protected], pwdreset=pwdReset: true, cn=cn: xxxx, description=description: xxxxxx;xxxxxx;I;xxxxxx} 

什麼是「二進制=的userPassword;二進制:[B @ 1a626f .. 。「意思是,我怎樣才能在這裏得到密碼?我必須對它進行編碼嗎?如果是的話,我該如何解決它?獲取其他操作屬性不成問題。

最好的問候!

+0

如果LDAP服務器配置正確,則不需要。它應該散列密碼,這是一個單向過程。如果你還沒有配置你的服務器。參見[這裏](http://stackoverflow.com/questions/2283937/how-should-i-ethically-approach-user-password-storage-for-later-plaintext-retrie/2287672#2287672)爲什麼你應該。 – EJP

+0

你的意思是,如果服務器配置正確,密碼不能被接收,或者如果配置正確,我可以嗎?是否可以通過「IBM Security Directory Server Web管理工具」進行配置? 因爲我真的需要提取密碼並再次將它們導入到另一個位置。 – InfoEngi

+0

如果OpenLDAP服務器配置正確,則無法檢索純文本密碼。當你的問題涉及OpenLDAP時,我不知道你爲什麼要談論IBM Security Directory Server Web管理工具。 – EJP

回答

0

一旦到配置與HASH(密碼+ SALT)的密碼存儲(一種默認的userPassword屬性),它是不可能以檢索明文原始密碼的LDAP。

+0

你知道嗎,我可以看到它是否配置了哈希(密碼+鹽)?也許我可以改變它來接收明文密碼。 – InfoEngi

+0

它通常是一個配置選項,我不是非常好,OpenLDAP的配置熟悉,但是,我想你會發現在OpenLDAP的手冊頁的配置選項/文檔 – Ironluca

+0

好吧,我已經找到了TDS選項...並在「管理安全屬性/密碼加密」配置爲AES256 - 加密。 但我不明白我可以看到明文密碼只是用「ldapsearch -v -D cn = root -w xxxxxx -s sub uid = testuser userPassword」 – InfoEngi

0

我發現下面的問題早LINK

是這種做法對還是可能嗎?因爲它不工作了,因爲它似乎userPassword對於「空」 Attribute userPassword = entry.getAttributes().get("userPassword");

「與LDAP array.if你需要得到原來的密碼文本使用 下面的代碼,我們將獲得字節數據:」 Attribute userPassword = attributes.get("userPassword"); String pwd = new String((byte[]) userPassword.get());

+0

不,它不會,一旦HASH(PASSWORD + SALT),你將在pwd字符串中得到這個值,而不是原始的用戶密碼 – Ironluca