`
Raistlin
  • 浏览: 18449 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

好久没编码了,前段时间帮同事整了个LDAP SSHA校验

    博客分类:
  • J2SE
阅读更多

好久不编码了,正发碰上同事要用,就匆匆忙忙写了一段,以后有时间还是要自己多写点东西玩,IDE的快捷键都忘了不少,唉~

package com.krynn.raistlin;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import weblogic.apache.xerces.impl.dv.util.Base64;

/**
 * @author Raistlin
 *
 */
public class LDAPPWVerify {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        System.out.println("USER-A,123:"
                + verifySHA("{SSHA}u2tWu+5vUGHxwrtmNfsZ9HmVrd5SMt16NAODEA==",
                        "123"));
        System.out.println("USER-A,1234:"
                + verifySHA("{SSHA}u2tWu+5vUGHxwrtmNfsZ9HmVrd5SMt16NAODEA==",
                        "1234"));
        System.out.println("USER-B,12345678:"
                + verifySHA("{SSHA}J5AvX6TexS54iJQttTnRz41Gn3jlGdhNPijLSA==",
                        "12345678"));
        System.out.println("USER-B,123:"
                + verifySHA("{SSHA}J5AvX6TexS54iJQttTnRz41Gn3jlGdhNPijLSA==",
                        "123"));
        System.out.println("USER-C,internet:"
                + verifySHA("{SSHA}Dw/8FJCva32hA765mLk/K4WXgMk3bOsIfgBOfw==",
                        "internet"));
        System.out.println("USER-C,123:"
                + verifySHA("{SSHA}Dw/8FJCva32hA765mLk/K4WXgMk3bOsIfgBOfw==",
                        "123"));
    }

    /**
     * 用于用户密码在LDAP进行验证
     *
     * @param ldappw
     *            LDAP中取出的用户密码
     * @param inputpw
     *            用户输入的用户密码
     * @return 是否验证通过
     * @throws NoSuchAlgorithmException
     */
    public static boolean verifySHA(String ldappw, String inputpw)
            throws NoSuchAlgorithmException {

        // MessageDigest 提供了消息摘要算法,如 MD5 或 SHA,的功能,这里LDAP使用的是SHA-1
        MessageDigest md = MessageDigest.getInstance("SHA-1");

        // 取出加密字符
        if (ldappw.startsWith("{SSHA}")) {
            ldappw = ldappw.substring(6);
        } else if (ldappw.startsWith("{SHA}")) {
            ldappw = ldappw.substring(5);
        }

        // 解码BASE64
        byte[] ldappwbyte = Base64.decode(ldappw.getBytes());
        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(inputpw.getBytes());
        // 把随机明文添加到摘要计算信息
        md.update(salt);

        // 按SSHA把当前用户密码进行计算
        byte[] inputpwbyte = md.digest();

        // 返回校验结果
        return MessageDigest.isEqual(shacode, inputpwbyte);
    }

}

分享到:
评论

相关推荐

    SSHA.zip_SSHA_java SSHA_ssha加密

    Java中使用SSHA对数据进行加密, LDAP-SHA加密与解析.

    论文研究-基于SSH和LDAP的分布式安全文件系统.pdf

    如何为文件系统提供更完备和更强伸缩性的安全保障是...基于LDAP技术和SSH协议设计了一个分布式安全文件系统,为文件系统提供了灵活而强大的安全策略保护,介绍了分布式安全文件系统的框架、原理以及安全设计以及分析。

    RuoYi前后端不分离项目整合LDAP

    基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于RuoYi框架,使用的是ruoyi前后端不分离的版本,实现对LDAP的整合 基于...

    spring boot集成ldap

    项目中使用spring boot框架集成了ldap协议的方法,调用了增删改查的API,基本实现了spring boot对于ldap的所有方法,只要搭建好了ldap服务器,改一下配置文件即可运行。

    LDAP入門LDAP入門LDAP入門

    LDAP入門,LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門

    LdapBrowser2.82版和LDAP使用手册

    LdapBrowser2.82版,能浏览服务器的ldap数据,还有一份word详细使用文档及ldap安装说明

    ssh-ldap-pubkey:实用程序,用于管理LDAP中存储的SSH公钥

    该项目提供了一个实用程序来管理存储在LDAP中的SSH公共密钥,还提供了一个脚本,供OpenSSH服务器从LDAP加载授权密钥。 为什么? 当您有许多服务器时,很难管理授权密钥。 您必须将所有公共密钥复制到要登录的每个...

    对LDAP的基本操作(Spring-ldap)+Ext实现显示LDAP的树状结构

    资源没有对LDAP创建的内容。 资源主要有: rar包:一个Web工程, 主要有,利用Spring-ldap对LDAP的基本操作(查询,增删改);Extjs实现的对Ldap的树状结构的显示,结构有点类似Softerra LDAP;一个测试类。 pdf:...

    ldap 浏览器 LdapBrowser282

    LdapBrowser282 ldap浏览器 LdapBrowser 查看openldap的好工具。 使用需要有JDK环境。

    java连接和验证ldap文档

    java连接和验证的ldap学习文档,密码的校验,通过jndi连接ldap服务

    LDAP服务器.pdf

    1 LDAP 基础 LDAP 的英文全称是 Lightweight Directory Access Protocol, 一般都简称为 LDAP。 它是基于 X.500 标准的,但是简单多了并且可以根据需要定制。与 X.500 不同,LDAP 支 持 TCP/IP,这对访问 Internet ...

    什么是LDAP连接工具?如何利用好它.docx

    # LDAP连接工具 LDAP是一种轻量级目录访问协议,用于在网络中访问分布式目录服务。要连接到LDAP目录,需要一种LDAP连接工具。 以下是一些常用的LDAP连接工具: ## 1. Apache Directory Studio Apache Directory ...

    LDAP使用手册.doc

    LDAP是轻量级目录访问协议的简称(Lightweight Directory ...3:LDAP是一个标准的,开放的协议,具有平台无关性。 4:数据分布广,规模可灵活扩充。 5:LDAP目录服务器可以使任何一种开放源代码或商用的LDAP目录服务器。

    ldap安装与客户端ldapadmin windows

    ldap安装与客户端ldapadmin windows版本,

    实际WEB项目整合 Shiro 以及 LDAP 方案.docx

    实际WEB项目整合 Shiro 以及 LDAP 方案.docx,用户访问WEB项目时,链接会被配置好的ShiroFilter拦截,如果用户会话没有经过认证,则重定向到登录URL,提交登录表单时,系统通过LDAP进行身份校验,校验通过后重定向到...

    ldap的一个实例

    ldap的一个实例,自己做过一个小项目,以后也许用得着

    ldapbrowser.7z

    LDAP

    c操作ldap例子c操作ldap例

    c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例

    LDAP客户端GitHub-Ldap.zip

    GitHub-Ldap 是 GitHub Enterprise 的一部分,是 LDAP 客户端。GitHub-Ldap 封装了 Net::LDAP,方便易用。 标签:GitHub

    java操作ldap类

    java操作ldap类java操作ldap类java操作ldap类

Global site tag (gtag.js) - Google Analytics