2

每次我运行“加密”或“摘要”命令时,我的输出都包含多个字符“\”实例。

参见示例“选择加密('123456789012345','1234','aes');” - 预期输出:“\x34591627f9c8eae417fc7cbbf458592c”

而我的输出如下:“4Y\026'\371\310\352\344\027\374|\273\364XY”

这同样适用于摘要命令;我是否错误地安装了 pgcrypto?

4

1 回答 1

3

is的返回类型encryptbytea,可以用不同的方式表示。您的两个不同输出只是相同值的两种表示形式(请注意“转义”格式中的奇怪转义):

test=# select (bytea E'4Y\\026''\\371\\310\\352\\344\\027\\374|\\273\\364XY,') =
test-#        (bytea '\x34591627f9c8eae417fc7cbbf458592c') as eq;
 eq 
----
 t
(1 row)

在我安装的 PostgreSQL 中,“十六进制”格式是默认格式,但由于这对您不适用,您可以设置bytea_output,它控制字节值的输出:

test=# select encrypt('123456789012345','1234','aes');
                   encrypt                   
---------------------------------------------
 4Y\026'\371\310\352\344\027\374|\273\364XY,
(1 row)

test=# set bytea_output = 'hex';
SET
test=# select encrypt('123456789012345','1234','aes');
              encrypt               
------------------------------------
 \x34591627f9c8eae417fc7cbbf458592c
(1 row)

您还可以显式编码字节以获取text值:

test=# select encode(encrypt('123456789012345','1234','aes'), 'hex');
              encode              
----------------------------------
 34591627f9c8eae417fc7cbbf458592c
(1 row)
于 2018-03-05T22:08:10.833 回答