如何通过 JNDI 检索 LDAP 密码

2023-11-29

我可以通过 JNDI 读取 LDAP 中存储的密码。但结果是一些乱码字符。那么我该如何解密呢?

下面是我的代码:

public static void main(String[] args)
        {
            String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
            String MY_HOST = "ldap://KhooGP-Comp1:1389";
            String MGR_DN = "cn=Directory Manager";
            String MGR_PW = "password";
            String MY_SEARCHBASE = "dc=QuizPortal";
            String MY_FILTER = "uid=yiwei";
            String MY_ATTRS[] = {"cn", "uid", "sn", "userpassword"};

            //Identify service provider to use
            Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, INITCTX);
            env.put(Context.PROVIDER_URL, MY_HOST);

            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL, MGR_DN);
            env.put(Context.SECURITY_CREDENTIALS, MGR_PW);

            try
            {
                // Create the initial directory context
                InitialDirContext initialContext = new InitialDirContext(env);
                DirContext ctx = (DirContext)initialContext;

                System.out.println("Context Sucessfully Initialized");

                SearchControls constraints = new SearchControls();
                constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

                NamingEnumeration results = ctx.search(MY_SEARCHBASE, MY_FILTER, constraints);

                while(results != null && results.hasMore())
                {
                    SearchResult sr = (SearchResult) results.next();
                    String dn = sr.getName() + "," + MY_SEARCHBASE;
                    System.out.println("Distinguished Name is " + dn);

                    Attributes ar = ctx.getAttributes(dn, MY_ATTRS);

                    if(ar == null)
                    {
                        System.out.println("Entry " + dn);
                        System.out.println(" has none of the specified attributes\n");
                    }
                    else
                    {
                        for(int i=0; i<MY_ATTRS.length; i++)
                        {
                            Attribute attr = ar.get(MY_ATTRS[i]);
                            System.out.println(MY_ATTRS[i] + ":");

                            for(Enumeration vals=attr.getAll(); vals.hasMoreElements();)
                            {
                                System.out.println("\t" + vals.nextElement());
                            }
                        }
                    }
                }
            }
            catch(Exception e)
            {
                System.err.println(e);
            }
    }

Below is the result:

    Distinguished Name is uid=yiwei,ou=Administrator,o=SID,dc=QuizPortal
    cn:
            yiwei huang
    uid:
            yiwei
    sn:
            huang
    userpassword:
            [B@1cd8669

有什么建议吗?提前谢谢了

Kevin


您所看到的 ([B@1cd8669) 是 Java 表达“这是一个字节数组”的方式。

存储的“密码”很可能是真实密码的哈希值或加密版本。根据定义,加密散列是不可逆的,因此如果 LDAP 存储散列,您将无法看到用户的密码是什么。

如果它是加密的,那么如果您知道算法和密钥,解密就相当简单。充气城堡是一个很棒的 Java 加密库,可以用来解密密码。

基本上,您需要确切地知道您正在查看的内容,这取决于 LDAP 设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 JNDI 检索 LDAP 密码 的相关文章

随机推荐

  • 正则表达式仅匹配公共 IPv4 地址

    起初 我认为很容易找到只匹配互联网上公共 IPv4 地址的正则表达式 然而 经过大量的谷歌搜索 我什么也没得到 所以我尝试 编写正则表达式 如下 Perl 风格 0 9 0 9 1 3 2 0 9 1 3 1 1 9 0 9 1 3 2 0
  • BottomSheetBehavior - 只允许拖动视图的一部分

    我有一个使用 CoordinatorLayout 中的 BottomSheetBehavior 实现的底部工作表 我的 BottomSheet 有一个顶部应用栏标题栏 然后是一些可滚动的内容 像这样的东西
  • 使用 Windows api 读取应用程序的当前安装版本

    我试图使用 Windows api 来查找已安装应用程序的版本信息 我使用升级代码通过 MsiEnumRelatedProducts api 查找产品代码 但是当我尝试使用产品代码使用 MsiGetProductInfo 时 版本信息返回为
  • 检查 docx 是否损坏

    我尝试了很多解决方案 但代码总是检查损坏的文件并发送 true using FileStream fileStream File OpenRead path 0 MemoryStream memStream new MemoryStream
  • 为什么 CMD 转义字符有魔力而不是转义换行符

    我尝试执行简单的脚本 set list a b c echo list 输出是 a b a b 虽然我预计它是 a b c 引号似乎破坏了一切 因为如果 b 没有引号 则一切正常 我也很奇怪为什么它只在第二条新线转义时中断 那么 为什么输出
  • 如何在VS2013中隐藏引用计数?

    Visual Studio 2013 引入了一项新功能 它可以显示每种方法的使用次数 我觉得它不是很有用 而且它弄乱了我的文件间距 我如何禁用它 似乎找不到这个选项 我猜您可能正在运行 VS2013 Ultimate 的预览版 因为它没有出
  • 将 *array 分配给指针

    以下内容摘自Harbinson Steele C 参考手册 第五版 根据书中的两个作业p是等价的 7 5 6 地址运算符 int a 10 p p a p a 然而 根据 C faq问题 6 12 a是指针类型int然而 a是指向数组的指针
  • 无法将 macOS-arm64 的库与 macOS-arm64 的可执行文件链接

    I have some trouble with creating a build system on a Monterey M1 MacBook 到目前为止 我有一个可用的 Makefile 来构建和链接库 简化 g c所有 cpp 文件
  • Android NDK 中的 ICU 库

    我正在尝试为依赖于 ICU 库 libicuuc so 和 libicui18n so 的 C 库创建 JNI 包装器 我尝试在 NDK 标准版本和 CrystaX 版本 在 Mac OS X 机器上 中构建 ICU4C 并不断遇到如下链接
  • 从 Android Activity 调用 javascript 函数

    我在主活动中使用以下代码 其给出的函数 display 未定义 public class cordovaExample extends DroidGap Context mcontext private novel n private Se
  • Spring + Hibernate +JTA - HibernateTransactionManager 或 JTATransactionManager

    我要整合Spring and 休眠并使用JTA用于管理交易 我还想将事务处理委托给应用程序服务器 在我的例子中是 JBoss 我对 的配置有疑问事务管理器 春天的豆子 1 我们可以使用Hibernate事务管理器并设置属性hibernate
  • 设计一个仅适用于 Android 平板电脑的应用程序 [重复]

    这个问题在这里已经有答案了 假设我想构建 2 组不同的仅限平板电脑的布局 一台适用于 600dp 7 英寸平板电脑 1024x600 一台适用于 720dp 10 英寸平板电脑 1280x720 或 1280x800 据我所知 在 andr
  • 无法上传图像(HttpPostedFileBase 为 Null)

    我尝试使用图像上传器 但是当我单击浏览并选择图像然后提交表单时 HttpPostedFileBase 为空 我的实施有遗漏吗 请帮忙 View
  • 如何解决共享 Google Apps 脚本库的“此应用程序被阻止”错误?

    我正在尝试创建一个可以在 Google 表格电子表格中重复使用的 Google Apps 脚本 GAS 库 下列的这些说明 这是我到目前为止所做的 创建了一个新项目谷歌云平台 在步骤 1 中为项目启用 Google Sheets API 在
  • 用户卸载 Android 应用程序时的通知

    当用户从他 她的 Android 设备卸载我的应用程序时 有没有办法收到通知 不 您可以使用 PACKAGE REMOVED 广播接收器获取其他应用程序卸载事件 但不能获取应用程序本身卸载的事件 因为它已被删除 请参阅文档here
  • 如何更新正在运行的 EXE?

    如何用新版本替换正在运行的 EXE 你能行的this way 重命名正在运行的 EXE 将新版本复制到旧名称 当新版本启动时删除重命名的EXE 请注意 这绝对是不推荐的行为
  • Javascript 从单独的 php 脚本获取输出

    我希望 javascript 能够使用 jQuery 调用 php 脚本 它只是回显一个字符串 I think get是正确的方法 但不太确定 然后我想使用返回的字符串作为 JavaScript 变量 get 确实是可行的方法 首先 您需要
  • 如何使用 .NET 4 将自定义属性添加到 Word 文档?

    使用 NET 4 如何向文档添加自定义属性 我假设事情是这样的 WordApp an instance of Microsoft Office Interop Word Application ActiveDocument CustomDo
  • Python:Pandas Dataframe 如何将整列与标量相乘

    如何将数据帧给定列的每个元素与标量相乘 我尝试过寻找SO 但似乎找不到正确的解决方案 做类似的事情 df quantity 1 trying to multiply each row s quantity column with 1 给我一
  • 如何通过 JNDI 检索 LDAP 密码

    我可以通过 JNDI 读取 LDAP 中存储的密码 但结果是一些乱码字符 那么我该如何解密呢 下面是我的代码 public static void main String args String INITCTX com sun jndi l