首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带密码的pgcrypto Postgresql PGP pgp_pub_decrypt

带密码的pgcrypto Postgresql PGP pgp_pub_decrypt
EN

Stack Overflow用户
提问于 2012-07-29 18:46:52
回答 1查看 2.5K关注 0票数 2

与PostgreSQL8.4相比,我在pgcrypto上经历了很少的数据加密问题。

第一种情况:工作正常:

从keytbl中选择pgp_pub_decrypt(pgp_pub_encrypt('fsck‘)、de装甲(公键)、'compress-algo=1、密码-algo=美学256’)、去装甲(Seckey)。 ->返回"fsck“

密钥1是没有密码的pgp。

第二个案例:不起作用

从keytbl中选择pgp_pub_decrypt(pgp_pub_encrypt('fsck‘)、de装甲(公共键)、'compress-algo=1、密码-algo=256’)、脱甲(Seckey)、密码( keytbl.id=2 )。 ->返回ERREUR:损坏的数据

当我用密码生成密钥时, pgcrypto不想解密使用公钥加密的消息.

有人猜到吗?这让我发疯了..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-06 10:37:50

至少在8.4和9.0中,这似乎是一个已知的bug。通过避免使用密码短语功能以及使用pgp_sym_encryptpgp_sym_decrypt来管理密钥的密码,我避免了这一点。

通常,如果这给您带来问题,您最好的选择是使用密码单独加密密钥,使用经过良好测试的函数。

让你知道我们是如何做到的:

代码语言:javascript
复制
create or replace function user__replace_keys
(in_public_key bytea, in_private_key bytea, in_passphrase text)
RETURNS user_key
LANGUAGE SQL AS
$$
UPDATE user_key
   SET last_resort_key = pgp_pub_encrypt(
                             pgp_pub_decrypt(
                                   last_resort_key,
                                   pgp_sym_decrypt_bytea(priv_key, $3)
                             ), $2
                         ),
       pub_key = $2,
       priv_key = pgp_sym_encrypt_bytea($2, $3)
 WHERE login = SESSION_USER
RETURNING *;
$$;

请注意,发送到服务器的私钥不能被密码封存。实际上,我们可能会在服务器或中间件中生成它,以避免出现问题。这样就避免了您正在经历的那种错误。

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

https://stackoverflow.com/questions/11711958

复制
相关文章

相似问题

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