2012-09-26 147 views
2

我正在進行現場加密/解密。postgresql加密/解密

我選擇的是

select encrypt('123456789','1234','aes'); 
       encrypt    
------------------------------------ 
\x34591627f9c8eae417fc7cbbf458592c 
(1 row) 

我雖然得到了加密我的數據,另一個字符串有解密像下面後...

postgres=# select decrypt('\x34591627f9c8eae417fc7cbbf458592c','1234','aes'); 
      decrypt    
---------------------------------- 
\x313233343536373839303132333435 
(1 row) 

有我做了錯誤的方式? (我知道這種要價的可能是愚蠢的......)提前

我要做的就是剛開最樸素的方式和加密的數據具有體積小....

謝謝...

+0

如果這是密碼,不要將它們加密,鹽他們,單向散列他們。您通常不需要能夠恢復密碼的純文本,只需確定它的哈希值是否與提供給您的哈希值相匹配即可。 –

回答

12

解密函數正在返回一個字節字符串,而不是字符串,因此它以十六進制表示形式顯示。實際值是相同的\ x31 = 1,\ x32 = 2等。

您需要將返回值轉換回文本。

如:

select convert_from(decrypt('\x34591627f9c8eae417fc7cbbf458592c','1234','aes'),'SQL_ASCII'); 
    convert_from 
----------------- 
123456789
(1 row) 

Postgresql string functions

+0

非常感謝你... – KIM