Pgcrypto 命令产生非标准输出

Pgcrypto commands produce non-standard output

每次我 运行 'encrypt' 或 'digest' 命令我的输出包含多个字符 '\' 的实例。

参见示例 "select encrypt('123456789012345','1234','aes');" - 预期输出: “\x34591627f9c8eae417fc7cbbf458592c”

而我的输出如下: "4Y6'102474|34XY,"

摘要命令也是如此;我是否错误地安装了 pgcrypto?

return type of encrypt is bytea, which can be represented in different ways。你的两个不同的输出只是相同值的两种表示(注意“转义”格式中奇怪的转义):

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

在我安装的 PostgreSQL 中,"hex" 格式是默认格式,但由于这对您来说不正确,您可以设置 bytea_output,它控制字节值的输出:

test=# select encrypt('123456789012345','1234','aes');
                   encrypt                   
---------------------------------------------
 4Y6'102474|34XY,
(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)