postgresql - Pgcrypto 命令产生非标准输出

标签 postgresql output pgcrypto

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

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

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

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

最佳答案

return type of encryptbytea,可以用 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 中,“十六进制”格式是默认格式,但由于这不适合您,因此您可以设置 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)

您还可以显式编码字节以获得文本值:

test=# select encode(encrypt('123456789012345','1234','aes'), 'hex');
              encode              
----------------------------------
 34591627f9c8eae417fc7cbbf458592c
(1 row)

关于postgresql - Pgcrypto 命令产生非标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49119196/

相关文章:

Java Hibernate 奇怪的编码错误?

java - 尝试使用 JSP 搜索相似图像时出错

SQL约束更新问题

java - Intellij Idea 控制台延迟

python - 从 csv 文件中删除特定字符,并重写到新文件

python - 在 Python 中跨进程共享与 postgres 数据库的连接

java - 向文件添加动态名称

具有函数 gen_random_uuid() 的 PostgreSQL 查询不适用于 Windows

python - 从 python 绑定(bind)到 pgcrypto

postgresql - 如何在 PostgreSQL 中使用 pgcrypto 加密整个表