首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgresql加密/解密

postgresql加密/解密
EN

Stack Overflow用户
提问于 2012-09-26 17:16:43
回答 2查看 42.1K关注 0票数 12

我在做字段加密/解密。

我选择的是

代码语言:javascript
复制
select encrypt('123456789012345','1234','aes');
              encrypt               
------------------------------------
 \x34591627f9c8eae417fc7cbbf458592c
(1 row)

我对我的数据进行了加密,另一个字符串在解密后仍然存在,如下所示…

代码语言:javascript
复制
postgres=# select decrypt('\x34591627f9c8eae417fc7cbbf458592c','1234','aes');
             decrypt              
----------------------------------
 \x313233343536373839303132333435
(1 row)

我走错路了吗?(我知道这样的询问可能很愚蠢……)

我要做的就是以一种最简单的方式获得加密数据,而且加密的数据很小……

先谢谢你...

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 17:49:41

decrypt函数返回的是一个字节字符串,而不是一个字符串,所以它以十六进制表示法显示。实际值是相同的\x31 = 1、\x32 =2等等。

您需要将返回值转换回文本。

例如:

代码语言:javascript
复制
select convert_from(decrypt('\x34591627f9c8eae417fc7cbbf458592c','1234','aes'),'SQL_ASCII');
  convert_from   
-----------------
 123456789012345
(1 row)

Postgresql string functions

票数 27
EN

Stack Overflow用户

发布于 2018-08-15 10:42:42

谢谢你,Gary

此外,如果您在表查询中使用decrypt,则必须专门将该列转换为bytea类型。例如,如果您具有以下内容:

代码语言:javascript
复制
CREATE TABLE public.test_crypto
(
id bigint NOT NULL DEFAULT nextval('test_crypto_id_seq'::regclass),
plain_text text COLLATE pg_catalog."default",
crypted_text text COLLATE pg_catalog."default",
CONSTRAINT test_crypto_pkey PRIMARY KEY (id)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;

您可以像这样加密数据:

代码语言:javascript
复制
insert into public.test_crypto (plain_text, crypted_text)
values ('plaintext', encrypt('plaintext', 'salty', 'aes'))

然后像这样解密:

代码语言:javascript
复制
select id, plain_text,
convert_from(decrypt(crypted_text::bytea, 'salty', 'aes'), 'SQL_ASCII')
from test_crypto

如果你不使用crypted_text::bytea,SQL解析器会因为找不到你所说的“解密”函数而大喊大叫。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12598382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档