【问题标题】:Pgcrypto commands produce non-standard outputPgcrypto 命令产生非标准输出
【发布时间】:2018-03-05 20:47:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: postgresql output pgcrypto


    【解决方案1】:

    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 中,“hex”格式是默认格式,但由于您不这样,您可以设置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)
    

    【讨论】:

      猜你喜欢
      • 2014-02-02
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多