java - xdmp :hash64 equivalent in Java

标签 java hashcode marklogic

我正在尝试使用 XQuery 和 Java 生成相同的 64 位整数。 目前,我正在使用 XQuery (MarkLogic) 并使用 xdmp:hash64生成 64 位数字的函数。

例如,xdmp:hash64('123') 将为我们提供 6570863421667228143

现在我想用 Java 生成相同的内容。我想知道是否有人可以提供一些见解

谢谢

最佳答案

xdmp:hash64 算法是专有的,具有未知的属性。您可以将每个输入从 Java 发送到 MarkLogic,询问它哈希是什么。但我会寻找一种在两种环境中都可用的哈希算法。

根据您的需要,SHA-2 可能是合适的选择:https://docs.marklogic.com/xdmp:sha512xdmp:sha384xdmp:sha256

您要求像 xdmp:hash64 这样的 64 位数字产生:64 位无符号长整数。 SHA-2 函数返回十六进制或 base64 字符串,但十六进制很容易处理:

xdmp:hex-to-integer(xdmp:sha512('fubar'))

如果抛出 XDMP-FIPSWEAKHASH,那么您的集群处于 FIPS 模式。在这种情况下,您必须通过添加 key 来使用 HMAC 变体:

xdmp:hex-to-integer(xdmp:hmac-sha512('s3cr!t', 'fubar'))
=> 18446744073709551615

对于等效的 Java 代码 SHA2 password hashing in java可能有帮助。只要您在两侧使用相同的算法和 key ,就可以了。

请注意,使用无符号 64 位长整型可能不适合 Java,因为 Java 没有将无符号 64 位长整型作为基本类型。我知道 JDK8 提供了一些帮助。但是,比较十六进制字符串可能会像其他任何解决方案一样简单高效。

关于java - xdmp :hash64 equivalent in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25457943/

相关文章:

java - Selenium 页面对象模式: get objects list

java - 将 Java 对象映射到 @XmlElement 值

java - 将 SQL 数据库中的表值插入到 ArrayList

error-handling - F#HashCode到枚举转换

java - 关于Java HashMap冲突的困惑

java - 当对象数量超过 `int` 所能容纳的数量时,身份哈希码会发生什么情况?

task - 从任务服务器运行的查询找不到文档?

xml - 如何通过 XQuery 从 XML 中获取所有元素

java - Heroku:如何指定JVM buildpack非java项目的路径?

marklogic - 在 MarkLogic 8 中删除/更新双时态三元组