作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 16 字节的 md5 散列,我需要使用 XOR 将其“折叠”成 4 字节数据:{1st 4 bytes} XOR {2nd 4 bytes} XOR {3rd 4 bytes} XOR {4th 4字节}。然后我需要将结果转换为十六进制形式(8 个字符的字符串)。
我正在像这样生成我的散列(解码为十六进制,因为它看起来更容易处理):
SELECT decode(md5('test'), 'hex');
但就我所知。我不知道将 16 字节哈希拆分为 4 个 4 字节值,然后对这些 4 字节值进行异或的最佳方法。
最佳答案
不幸的是 docs对于可以用位字符串值做什么有点含糊,但提到了 substring
函数(语法在 string functions page 上),可用于从中提取部分:
select i1 # i2 # i3 # i4
from cast('x' || md5('test') as bit(128)) bits,
cast(substring(bits from 97 for 32) as int4) i1,
cast(substring(bits from 65 for 32) as int4) i2,
cast(substring(bits from 33 for 32) as int4) i3,
cast(substring(bits from 1 for 32) as int4) i4
注意:较低的位在其位串表示中具有较高的索引,f.ex.
select 3::bit(32)
-- will yield '00000000000000000000000000000011'
关于postgresql - Postgres : How to convert 16 bytes into 4 bytes by XOR-ing every 4 bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36045373/
我是一名优秀的程序员,十分优秀!