- 浏览: 140188 次
- 性别:
- 来自: 深圳
最新评论
-
wzk2111:
代码 可用,楼主的思路可以参考
javascript加密java解密 -
Imini123:
[align=center][color=red][/colo ...
freemarker实现通用分页,首页静态化,通用select,通用文章显示 -
igting:
js对+,@符号的加密应该有问题,java解密不对。
javascript加密java解密 -
Seanman:
初学freemarker,源码不全,不知道怎么用
freemarker实现通用分页,首页静态化,通用select,通用文章显示 -
无敌洋葱头:
目前这个只能对0-9 A-Z a-z加密,而且js还有问题。c ...
javascript加密java解密
package com.xxxpiao.common.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; @SuppressWarnings("restriction") public class LdapHelper { private static DirContext dirContext; public static Logger logger = LoggerFactory.getLogger(LdapHelper.class); /** * 默认账号连接LDAP服务器 * @return */ @SuppressWarnings(value = "unchecked") public static DirContext getDirContext() { String account = "cn=xxxadmin,ou=authusers,dc=2caipiao,dc=com"; //binddn String password = "Yae0zohV2mieJooCho"; //bindpwd String root = "dc=2caipiao,dc=com"; // root Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://192.168.90.144:389/" + root); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, account); env.put(Context.SECURITY_CREDENTIALS, password); try { // 链接ldap dirContext = new InitialDirContext(env); logger.info("认证成功!"); } catch (javax.naming.AuthenticationException e) { logger.error("认证失败:"+e.toString()); } catch (Exception e) { logger.error("认证失败:"+e.toString()); } return dirContext; } /** * * @param ldapAccount 连接LDAP服务器账号 * @param ldapPassword 连接LDAP服务器密码 * @param ldapRoot LDAP服务器根目录 * @param ldapServerIP LDAP服务器IP * @return */ @SuppressWarnings(value = "unchecked") public static DirContext getDirContext(String ldapAccount,String ldapPassword,String ldapRoot,String ldapServerIP) { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://"+ldapServerIP+":389/" + ldapRoot); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, ldapAccount); env.put(Context.SECURITY_CREDENTIALS, ldapPassword); try { // 链接ldap dirContext = new InitialDirContext(env); logger.info("认证成功!"); } catch (javax.naming.AuthenticationException e) { logger.error("认证失败:"+e.toString()); } catch (Exception e) { logger.error("认证失败:"+e.toString()); } return dirContext; } /** * 关闭LDAP连接 */ public static void closeDirCountext(){ try { if(dirContext!=null){ dirContext.close(); } } catch (NamingException ex) { logger.error(ex.toString()); } } /** * 验证密码的是否一致 * @param ldapPassword 从LDAP服务器获取的密码 * @param inputPassword 用户输入的密码 * @return * @throws NoSuchAlgorithmException */ @SuppressWarnings(value = "unchecked") public static boolean verifySHA(String ldapPassword, String inputPassword) throws NoSuchAlgorithmException { // MessageDigest 提供了消息摘要算法,如 MD5 或 SHA,的功能,这里LDAP使用的是SHA-1 MessageDigest md = MessageDigest.getInstance("SHA-1"); // 取出加密字符 if (ldapPassword.startsWith("{SSHA}")) { ldapPassword = ldapPassword.substring(6); } else if (ldapPassword.startsWith("{SHA}")) { ldapPassword = ldapPassword.substring(5); } // 解码BASE64 byte[] ldappwbyte = Base64.decode(ldapPassword); byte[] shacode; byte[] salt; // 前20位是SHA-1加密段,20位后是最初加密时的随机明文 if (ldappwbyte.length <= 20) { shacode = ldappwbyte; salt = new byte[0]; } else { shacode = new byte[20]; salt = new byte[ldappwbyte.length - 20]; System.arraycopy(ldappwbyte, 0, shacode, 0, 20); System.arraycopy(ldappwbyte, 20, salt, 0, salt.length); } // 把用户输入的密码添加到摘要计算信息 md.update(inputPassword.getBytes()); // 把随机明文添加到摘要计算信息 md.update(salt); // 按SSHA把当前用户密码进行计算 byte[] inputpwbyte = md.digest(); // 返回校验结果 return MessageDigest.isEqual(shacode, inputpwbyte); } /** * 验证用户名密码 * @param ldapAccount 连接LDAP服务器账号 * @param ldapPassword 连接LDAP服务器密码 * @param ldapRoot LDAP服务器根目录 * @param ldapServerIP LDAP服务器IP * @param account 用户账号 * @param password 用户密码 * @return */ public static boolean authenticate(String ldapAccount,String ldapPassword,String ldapRoot,String ldapServerIP,String account, String password) { boolean success = false; DirContext dirContext = null; try { dirContext = LdapHelper.getDirContext(ldapAccount, ldapPassword, ldapRoot, ldapServerIP); SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration en = dirContext.search("", "cn=" + account, constraints); // 查询所有用户 while (en != null && en.hasMoreElements()) { Object obj = en.nextElement(); if (obj instanceof SearchResult) { SearchResult si = (SearchResult) obj; logger.info("name:"+si.getName()); Attributes attrs = si.getAttributes(); if (attrs == null) { System.out.println("No attributes"); } else { Attribute attr = attrs.get("userPassword"); Object o = attr.get(); byte[] s = (byte[]) o; String passwordFromLdap = new String(s); success = LdapHelper.verifySHA(passwordFromLdap, password); return success; } } else { logger.info(obj.toString()); } } dirContext.close(); } catch (NoSuchAlgorithmException ex) { try { if (dirContext != null) { dirContext.close(); } } catch (NamingException namingException) { logger.error(namingException.toString()); } logger.error(ex.toString()); } catch (NamingException ex) { try { if (dirContext != null) { dirContext.close(); } } catch (NamingException namingException) { logger.error(namingException.toString()); } logger.error(ex.toString()); } return false; } /** * 验证用户名密码(走默认的LDAP账号) * @param account 用户名 * @param password 用户密码 * @return */ public static boolean authenticate(String account, String password) { boolean success = false; DirContext dirContext = null; try { dirContext = LdapHelper.getDirContext(); SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration en = dirContext.search("", "cn=" + account, constraints); // 查询所有用户 while (en != null && en.hasMoreElements()) { Object obj = en.nextElement(); if (obj instanceof SearchResult) { SearchResult si = (SearchResult) obj; logger.info("name:"+si.getName()); Attributes attrs = si.getAttributes(); if (attrs == null) { System.out.println("No attributes"); } else { Attribute attr = attrs.get("userPassword"); Object o = attr.get(); byte[] s = (byte[]) o; String ldapPassword = new String(s); success = LdapHelper.verifySHA(ldapPassword, password); return success; } } else { logger.info(obj.toString()); } } dirContext.close(); } catch (NoSuchAlgorithmException ex) { try { if (dirContext != null) { dirContext.close(); } } catch (NamingException namingException) { logger.error(namingException.toString()); } logger.error(ex.toString()); } catch (NamingException ex) { try { if (dirContext != null) { dirContext.close(); } } catch (NamingException namingException) { logger.error(namingException.toString()); } logger.error(ex.toString()); } return false; } public static void main(String[] args) { System.out.println(authenticate("congmin.jin", "00")); System.out.println(authenticate("cn=xxxadmin,ou=authusers,dc=2caipiao,dc=com", "Yae0zohV2mieJooCho", "dc=2caipiao,dc=com", "192.168.90.144", "congmin.jin", "11")); } }
发表评论
文章已被作者锁定,不允许评论。
-
ES聚合查询大全
2020-11-18 16:16 267package com.xxx.es; import ... -
spring中使用logback日志组件替换log4j
2015-04-29 15:27 945logback比log4j的强大之处,请到logback的主页 ... -
java加密解密
2015-02-10 15:05 1730package com.neo.xnol.weixin.u ... -
eclipse常用配置
2015-01-05 11:23 1241Eclipse常用配置介绍 以 ... -
分布式事务-幂等
2014-12-30 14:04 683引用 http://www.360doc.com/conten ... -
实现基于nginx的tomcat负载均衡和集群配置
2014-12-26 16:22 1115今天看到"基于apache的tomcat负载均衡和集 ... -
java导出Excel
2014-10-14 17:00 1103package com.xxxpiao.datacompa ... -
<base target="_self"/>标签的巧妙用法
2014-10-10 15:34 746最近项目中一个小问题卡了我不少时间。我遇到的问题是:在项目的弹 ... -
分布式一致性-幂等
2014-09-28 14:53 1099关于分布式系统的数据 ... -
ModelResult-查询封装类
2014-09-25 09:14 3550package com.xxx.appmodel.doma ... -
通过JNDI访问LDAP目录服务
2014-09-04 17:46 3105package com.sina.test; imp ... -
java获取两个日期之间的年月(yyyy-MM)和年月日(yyyy-MM-dd)
2014-07-29 14:42 1843public List<String> pro ... -
maven-.m2
2014-07-28 14:48 797<settings> <!--< ... -
maven实战
2014-07-07 10:04 755<settings> <!--< ... -
验证敏感词汇
2014-07-04 10:01 959package com.xxxpiao.core.memb ... -
Jms实战
2014-07-02 09:27 696<?xml version="1.0&qu ... -
互联网数功能位,表扩展(flagBit,feature)
2014-06-26 17:39 814<select id="queryRegT ... -
线程运用-抽象类使用
2014-06-26 17:34 857package com.xxx.betcart.serve ... -
JDBC分批更新
2014-06-26 17:11 622@Override public boolean ba ... -
分批查询
2014-06-26 17:08 834package com.xxxpiao.common.ut ...
相关推荐
1. **目录结构探索**:使用 LDAP 连接工具,可以清晰地查看 LDAP 目录结构,理解不同对象类和属性的组织方式。 2. **数据管理**:编辑和创建 LDAP 条目,更新用户信息,管理组成员关系等。 3. **权限设置**:配置 ...
为在java中整合ldap写的工具类。 轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息...
1. **LDAPHelper.java**:这是一个实用工具类,通常包含各种静态方法,用于执行常见的LDAP操作,如添加、删除、修改和查找条目。它可能提供了简化的方法,以处理复杂的LDAP操作,如构建过滤器,执行搜索,或连接到...
**LDAPadmin:Windows环境下的LDAP管理工具** 在IT领域,LDAP(Lightweight Directory Access Protocol)是一种广泛用于存储和检索用户信息、配置数据等目录服务的数据访问协议。它为分布式网络提供了一个标准的...
LdapOperUtils 是 LDAP 操作工具类,包含了各种对 LDAP 目录进行查询、修改、添加、删除等操作的方法。这些方法通常会使用上文创建的 DirContext 对象进行实际的 JNDI 调用。例如,可能有一个 `search` 方法用于...
`ldapbrowser`作为一个IBM类工具,可能意味着它具有与IBM系统或服务集成的能力,或者是IBM推荐的用于管理其LDAP部署的第三方工具。 **Java与LDAP浏览器** 由于`ldapbrowser`被提及为“类似jar包打开工具”,我们...
1. **目录浏览**:允许用户查看整个LDAP目录结构,包括各个节点(如OU - 组织单元)、对象类和属性。 2. **对象创建与编辑**:支持创建新的用户、组或其他对象,并修改现有对象的属性,如用户名、密码、邮件地址等...
JXplorer是一款开源的、跨平台的LDAP和LDIF文件查看和编辑工具,它允许用户直观地浏览、创建和修改LDAP目录。对于开发和测试LDAP应用程序,这样的工具非常有用,因为它提供了一个图形化的界面来查看数据和执行操作,...
验证用户身份是LDAP工具的重要组成部分。C#中,可以通过`DirectorySearcher`类进行搜索操作,使用过滤器(如"(&(objectClass=user)(sAMAccountName=))”来查找特定用户,然后比较提供的密码与用户账户的密码哈希值,...
标题 "ldap连接测试工具源代码C#版" 涉及到的是一个使用C#编程语言开发的 LDAP(轻量级目录访问协议)连接测试工具。这个工具的主要功能是允许用户进行域用户信息的读取、域结构的探索以及登录验证。在Windows环境下...
在安装和配置OpenDJ时,你需要创建一个目录结构,定义对象类和属性,然后导入数据。这通常涉及以下步骤: 1. **安装服务器**:下载并安装OpenDJ软件包,根据指南配置服务器的基本设置。 2. **创建数据存储**:定义...
这类工具通常具有以下功能: 1. **连接与搜索**:LdapAdmin允许用户连接到 LDAP 服务器,输入服务器地址、端口、用户名和密码等信息,然后执行搜索操作来查找目录中的条目。用户可以根据特定的过滤条件来查找所需的...
3. Schema编辑器:用户可以通过Schema编辑器来定义和管理LDAP目录的结构,包括对象类、属性类型、命名规则等,以满足特定需求。 4. LDAP连接配置:用户可以轻松设置和保存多个LDAP服务器连接,以便快速切换和测试...
Laravel 4.x版本提供了一个强大的工具集,使得开发者能够轻松集成像LDAP这样的企业级身份验证系统,特别是对于那些依赖Active Directory(AD)或NTLM(NT LAN Manager)进行用户管理的组织。 ### LDAP简介 LDAP是一...
4. **导入初始数据**:可以使用LDAP的工具(如`ldapadd`命令)将用户数据导入到LDAP目录中。 5. **启用TLS/SSL**:对于安全性要求较高的场景,可以通过配置TLS/SSL来加密客户端与服务器之间的通信。 #### 客户端...
- `LdapTemplate`:这是Spring LDAP的核心类,提供了一种模板方法模式来执行各种LDAP操作。它封装了连接管理、查询构建和结果处理,使开发者能够专注于业务逻辑而不是底层细节。 - `DirContextOperations`:这是...
- **org.springframework.ldap.transaction.compensating.support**:提供了支持补偿事务处理的基础工具类。 - **org.springframework.ldap.ldif**:此包关注于 LDIF(LDAP 数据交换格式)相关的功能。 - **org....
A simple LDAP connection checker - by Tom Fonteyne Usage: java -jar ldaptest.jar -u <url> -b <baseDN> -f <filter> [-a attr1[,attr2]] [-D binddn -w password] [-rf|-ri|-rt] [-t [-n]]" Required:" -u ...
`LdapTemplate`是Spring LDAP的核心组件之一,它充当了一个高级的LDAP操作工具类。`LdapTemplate`提供了多种方法来执行常见的LDAP操作,如搜索、插入、修改和删除条目。它还负责处理LDAP连接和事务管理,使得开发...
使用者只需了解如何操作List和Map,即可利用这些工具类进行LDAP操作,例如: ```java Env env = new Env("com.sun.jndi.ldap.LdapCtxFactory", "ldap://server.example.com:389", "admin", "password"); ...