与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不想解密使用公钥加密的消息.
有人猜到吗?这让我发疯了..。
发布于 2013-04-06 10:37:50
至少在8.4和9.0中,这似乎是一个已知的bug。通过避免使用密码短语功能以及使用pgp_sym_encrypt和pgp_sym_decrypt来管理密钥的密码,我避免了这一点。
通常,如果这给您带来问题,您最好的选择是使用密码单独加密密钥,使用经过良好测试的函数。
让你知道我们是如何做到的:
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 *;
$$;请注意,发送到服务器的私钥不能被密码封存。实际上,我们可能会在服务器或中间件中生成它,以避免出现问题。这样就避免了您正在经历的那种错误。
https://stackoverflow.com/questions/11711958
复制相似问题