首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成哈希的BaseX编码

生成哈希的BaseX编码
EN

Stack Overflow用户
提问于 2016-05-19 16:29:00
回答 2查看 330关注 0票数 1

我需要从存储在BaseX管理的xml数据库中的元素值生成散列。应用散列函数,如.散列:md5(值)返回以下字符串:“ፒ﹋元*pܮqፒ˄ፒ˄﹋﹋*Pܮqፒ˄”散列:sha1 1()也返回类似的废话。

我把任何编码设置成utf8了吗?(XML-数据库本身使用某种人类可读的编码)

使用BaseX 8.4.4

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-19 16:51:14

每个模块的结果都是在xs:base64Binary中进行的--尽管它将字符串转换为基本数据,但它的核心仍然是二进制数据。

如果要将其转换为十六进制数字的xs:string

代码语言:javascript
复制
xs:string(xs:hexBinary(hash:md5("hello")))

...or,对于hash:md5()返回的默认base64表示形式,再次进行字符串化以防止任何二进制形式的返回.

代码语言:javascript
复制
xs:string(hash:md5("hello"))
票数 3
EN

Stack Overflow用户

发布于 2016-05-22 10:02:21

在BaseX 8.4中,序列化方法"basex“现在被用作默认的序列化方法。因此,类型为xs: BaseX 64B和xs:十六进制的项现在将以其本地二进制表示形式输出,甚至在BaseX图形用户界面中也是如此。

更改输出方法是反复讨论旧的“原始”序列化方法的结果,以及用户对RESTXQ和其他API的反馈,在这些API中,人们无法在其本机表示中返回二进制数据(例如文件内容)。如果希望以十六进制或base64的形式输出二进制数据,可以切换到另一个输出方法:

代码语言:javascript
复制
declare option output:method 'text';
hash:md5('abc')

正如Charles已经指出的那样,您还可以使用xs:string()string()查看二进制数据的十六进制或Base64表示。文档中的各种示例已经更新(每个人:请随时为我们的Wiki注册)。

就性能而言,比较二进制数据要比比较字符串表示要快得多。BaseX的散列模块生成xs类型的项:BaseX 64B(类似于处理二进制数据的大多数其他XQuery标准或扩展函数)。但是,XQuery规范不允许直接比较十六进制和Base64,因此可能需要将十六进制转换为Base64或反过来。在BaseX (和大多数其他XQuery实现)中,这非常便宜,因为内部字节表示是相同的。举个例子:

代码语言:javascript
复制
let $hash := '900150983CD24FB0D6963F7D28E17F72'
let $input := 'abc'
return xs:hexBinary(hash:md5($input)) = xs:hexBinary($hash)

使用最新的8.4.4快照 of BaseX,可以将节点指定为哈希函数的输入,因此不再需要将元素转换为字符串:

代码语言:javascript
复制
let $hash := '900150983CD24FB0D6963F7D28E17F72'
let $toHashElem := <x>abc</x>
return xs:hexBinary(hash:md5($toHashElem)) = xs:hexBinary($hash)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37329108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档