在Java中如何将SID转换为字符串,反之亦然?
我正在使用 Spring-LDAP 用 Java 编写一个程序。我需要实现一个方法,该方法应该通过 SID 搜索用户。因此,我使用像 "&((objectClass=User)(objectSid="+sid+"))"
这样的过滤器。搜索不适用于字符串格式的 sid,例如 "S-1-12-345677-5676743-223344-..."
。
使用 Apache Directory Studio,我可以使用如下过滤器定期查询我的 AD LDAP 数据库:(objectSid=\ff\01\03\04\1a\2b\...)
成功。这是十六进制格式的 objectSid。
现在,如何在 Java 程序中将 SID 从字符串转换为十六进制,反之亦然?
I'm writing a program in Java, using Spring-LDAP. I need to implement a method, which should search a user by SID. For this reason I use a filter like "&((objectClass=User)(objectSid="+sid+"))"
. The search doesn't work with sid in String format like "S-1-12-345677-5676743-223344-..."
.
Using Apache Directory Studio, I can query my AD LDAP database regulary using a filter like: (objectSid=\ff\01\03\04\1a\2b\...)
successfully. Here is the objectSid in hexadecimal format.
Now, how to translate the SID from String to hexadecimal and vice versa in a program, in Java?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
Advapi32Util 类。
我不确定这是否正是您需要的格式,但希望能让您更接近。
这里有一篇描述 SID 的博客文章格式可能会有所帮助。
There's the
convertSidToStringSid
andconvertStringSidToSid
methods in the Advapi32Util class.I'm not sure if that'll be the exact formats you need, but hopefully will get you closer.
And here's an blog post that describes the SID format which might be helpful.
ho1(使用 Advapi32Util)类建议的解决方案有两个限制:
因此,我编写了一个纯Java的类,没有外部依赖,并且可以在所有平台上运行。此类可以将安全标识符从二进制表示转换为文本表示,反之亦然。
如果您使用 Spring-LDAP,您还可以使用 LdapUtils 类提供的方法,但是这些方法不会对 SID 的格式执行任何检查,因此可能会产生不正确的结果或意外的异常。
The solution suggested by ho1 (using the Advapi32Util) class has two limitations:
Therefore, I have written a class that is pure Java, has no external dependencies and will work on all platforms. This class can convert security identifiers from their binary to their textual representation and vice-versa.
If you are using Spring-LDAP, you can also use the methods provided by the LdapUtils class, however those methods do not peform any checks on the format of the SID and thus might produce incorrect results or unexpected exceptions.
来自 http://miromannino.com/blog/convert- a-sid-to-string-with-java/
From http://miromannino.com/blog/convert-a-sid-to-string-with-java/
使用来自InPlaceMsAdObjectSidValueEditor.java :(
来自 Apache Directory Studio)
use convertToString from InPlaceMsAdObjectSidValueEditor.java :
(from Apache Directory Studio)
不使用 JNA 的示例
这里有一些不错的紧凑代码,用于在不使用 JNA 的情况下转换 SID。它甚至内置了一些“错误检查”功能,如果出现问题,则返回 NULL、EMPTY 或零长度数组。
对于 SID 到字符串:
对于字符串到 SID:
有关参考,请参阅 TechNet 的 安全标识符结构。
Example Without JNA
Here's some nice compact code for converting SIDs without using JNA. It even has some "error checking" built in by returning NULL, EMPTY, or a zero-length array if something isn't quite right.
For SID to String:
For String to SID:
For reference, see TechNet's Security Identifier Structure.
现有的解决方案都没有帮助我。但是 spring-ldap 可以正确地做到这一点:
依赖项是
Neither of existing solutions helped me. But spring-ldap can do it properly:
The dependency is