java ldap用戶密碼md5加密


在這里不過多介紹ldap,因為這樣的文章特別多,這里就簡單直接的記錄這一個問題。

在springboot中通過引入spring-boot-starter-data-ldap,使用LdapTemplate真的挺方便,現在遇到一個問題,添加用戶時,userPasswod在ldap中顯示的是明文密碼,我現在要對這個userPassword加密.

而我們不做任何設置查看源碼發現默認使用的是simple

 1 public class SimpleDirContextAuthenticationStrategy implements DirContextAuthenticationStrategy {
 2     private static final String SIMPLE_AUTHENTICATION = "simple";
 3 
 4     public SimpleDirContextAuthenticationStrategy() {
 5     }
 6 
 7     public void setupEnvironment(Hashtable<String, Object> env, String userDn, String password) {
 8         env.put("java.naming.security.authentication", "simple");
 9         env.put("java.naming.security.principal", userDn);
10         env.put("java.naming.security.credentials", password);
11     }

再看源碼中也有DIGEST-MD5方式加密,但是找了半天不知道怎么配置才能調用,搜索也沒發現他有引用這個類的地方。

查看springboot官網有沒有相關配置,告訴可以配置spring.ldap.base-environment,所以就配置了

spring.ldap.base-environment.java.naming.security.authentication=DIGEST-MD5

最后跟代碼發現還是會調用SimpleDirContextAuthenticationStrategy,而且配置的變量又會被重新定義成simple。

 1 public class DigestMd5DirContextAuthenticationStrategy implements DirContextAuthenticationStrategy {
 2     private static final String DIGEST_MD5_AUTHENTICATION = "DIGEST-MD5";
 3 
 4     public DigestMd5DirContextAuthenticationStrategy() {
 5     }
 6 
 7     public DirContext processContextAfterCreation(DirContext ctx, String userDn, String password) {
 8         return ctx;
 9     }
10 
11     public void setupEnvironment(Hashtable<String, Object> env, String userDn, String password) {
12         env.put("java.naming.security.authentication", "DIGEST-MD5");
13         env.put("java.naming.security.principal", userDn);
14         env.put("java.naming.security.credentials", password);
15     }
16 }

經過各種查官網,看源碼,都不行,然后就研究ldap,看ldap怎么加密碼的,發現ldap有一條命令可以返回md5加密碼,然后拿這個加密密碼存入userPasswod,再登錄是可以的,所以只要我知道它是怎么加密的,我也按這種方式加密,ldap就可以解密。

1 [root@alone ~]#  slappasswd -h {md5} -s "x1"
2 {MD5}bb+awtoJ7h096/WlGHPsbQ==

 

 

 

ldap md5加密代碼如下:

 1   /**
 2      * ldap md5加密
 3      * @param str
 4      * @return
 5      * @throws NoSuchAlgorithmException
 6      * @throws UnsupportedEncodingException
 7      */
 8     public static String LdapEncoderByMd5(String psw) throws NoSuchAlgorithmException, UnsupportedEncodingException {
 9         MessageDigest md5=MessageDigest.getInstance("MD5");
10         BASE64Encoder base64en = new BASE64Encoder();
11         String md5psw=base64en.encode(md5.digest(psw.getBytes("utf-8")));
12         return "{MD5}"+ md5psw;
13     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM