zoukankan      html  css  js  c++  java
  • 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     }
    The miracle is this--the more we share, the more we have
  • 相关阅读:
    Linux客户/服务器程序设计范式——阿帕奇服务器(多进程)
    Linux客户/服务器程序设计范式2——并发服务器(进程池)
    封装readn
    C++学习之路: 函数适配器
    C++学习之路: 智能指针入门
    C++学习之路: 单例模板
    C++学习之路: 左值&右值 的讨论 和 ”move“ 值传递方式
    C++学习之路: 特殊操作符->的重载
    C++学习之路: 模板函数
    C++学习之路: 时间戳 封装成类
  • 原文地址:https://www.cnblogs.com/dreamfly2016/p/11127299.html
Copyright © 2011-2022 走看看