如何在postgresql中对md5哈希值进行异或运算并将其转换为十六进制
到目前为止我都试过了如何在postgresql中对md5哈希值进行异或运算并将其转换为十六进制,postgresql,cryptography,md5,xor,md5sum,Postgresql,Cryptography,Md5,Xor,Md5sum,到目前为止我都试过了 SELECT md5(text) will return text (hex strings) . 然后我们需要对它们进行异或运算 SELECT x'hex_string' # x'hex_string'; 但是上面的结果是二进制值。 如何再次将它们转换为十六进制字符串 postgresql中是否有xor md5值并再次将其转换为十六进制值?这些二进制值实际上是位变的类型,这与bytea有很大不同 位变化内置了对XOR等的支持,但PostgreSQL
SELECT md5(text) will return text (hex strings) .
然后我们需要对它们进行异或运算
SELECT x'hex_string' # x'hex_string';
但是上面的结果是二进制值。
如何再次将它们转换为十六进制字符串
postgresql中是否有xor md5值并再次将其转换为十六进制值?这些二进制值实际上是位变的类型,这与bytea
有很大不同
位变化
内置了对XOR等的支持,但PostgreSQL不提供从位变化
到字节转换
您可以编写一个执行强制转换的函数,但这并不是一件小事,在您的情况下可能不是更有效的方法
直接对md5摘要进行异或更有意义。PostgreSQL也没有为bytea
提供XOR运算符,但它可以很容易地写入函数中,特别是假设操作数的长度相等(md5摘要为16字节):
现在,生成十六进制字符串的内置postgresqlmd5
函数也不是最适合后处理的。模块提供以下功能:
digest(data text, type text) returns bytea
使用此函数并以十六进制字符串形式获取最终结果:
select encode(
xor_digest ( digest('first string', 'md5') ,
digest('second string', 'md5')),
'hex');
生成结果:c1bd61a3c411bc0127c6d7ab1238c4bd
,类型为text
如果无法安装pgcrypto
,并且只有内置的md5
功能可用,您仍然可以组合encode
和decode
以获得如下结果:
select
encode(
xor_digest(
decode(md5('first string'), 'hex'),
decode(md5('second string'), 'hex')
),
'hex'
);
结果:
c1bd61a3c411bc0127c6d7ab1238c4bd
你可能想检查一下
我最近为这样一个用例编写了这个postgres脚本。谢谢。威尔考虑在postgresql中使用md5_agg()。请查收
select
encode(
xor_digest(
decode(md5('first string'), 'hex'),
decode(md5('second string'), 'hex')
),
'hex'
);