Pgcrypto 命令产生非标准输出



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

请参阅示例"select encrypt('123456789012345','1234','aes'(;" - 预期输出:"\x34591627f9c8eae417fc7cbbf458592c">

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

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

encrypt的返回类型是 bytea ,可以用不同的方式表示。您的两个不同的输出只是相同值的两个表示(注意"转义"格式中的奇怪转义(:

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                   
---------------------------------------------
 4Y26'37131035234427374|273364XY,
(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)

相关内容

  • 没有找到相关文章

最新更新