在XQuery中,如何模糊文本字符串并在输出中保持其字符长度?

时间:2014-01-20 22:59:09

标签: xquery marklogic

我需要混淆元素的文本内容。比方说,例如, 计划ID。计划ID可能会在一个文档中或多个文档中出现多次 不同的文件。我需要混淆的计划ID是唯一且一致的 (始终将12345映射到abc72)并且仅限于5个字符。我不希望有一个单独的文档存在,可用作映射文件或包含键。

由于字符的原因,简单的哈希函数不起作用 长度限制。还有其他想法吗?我想坚持以纯粹的方式做这件事 的XQuery。

2 个答案:

答案 0 :(得分:2)

您可以可靠地使用fn:translate(类似于unix tr命令) 将一个字符转换为另一个这类似于古老的rot13,但更灵活,更强大。

您也可以在此基础上,对文本字符串中的每个位置使用不同的固定翻译。

答案 1 :(得分:1)

您仍然可以使用哈希。只需截断到你需要的位数,如下所示:

substring(
  xdmp:integer-to-hex(xdmp:hash64($input)),
  1, string-length($input))

只要散列函数很好,那应该可以正常工作。如果需要处理长字符串,请多次填充哈希值然后截断。如果您需要任何类型的安全性,您应该将私钥放入混合中,并将xdmp:hash64替换为xdmp:hmac-sha512。无论如何,这可能是个好主意,因为SHA-2 512具有众所周知的特性。

substring(
  xdmp:hmac-sha512($key, $input, 'base64'),
  1, string-length($input))

哈希碰撞是可能的,但不太可能。