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     }
复制代码

 

posted @   大梦想家  阅读(4824)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示