gpt4 book ai didi

postgresql - pgcrypto Postgresql PGP pgp_pub_decrypt 带密码

转载 作者:行者123 更新时间:2023-11-29 12:22:30 26 4
gpt4 key购买 nike

我在使用 Postgresql 8.4 通过 pgcrypto 进行数据加密时遇到了一些问题。

第一种情况:工作正常:

select pgp_pub_decrypt(pgp_pub_encrypt('fsck', dearmor(pubkey),'compress-algo=1, cipher-algo=aes256'),dearmor(seckey)) from keytbl where keytbl.id=1

-> returns "fsck"

key 1 是没有密码的 pgp

第二种情况:不起作用

select pgp_pub_decrypt(pgp_pub_encrypt('fsck', dearmor(pubkey),'compress-algo=1, cipher-algo=aes256'),dearmor(seckey),'password') from keytbl where keytbl.id=2

-> returns ERREUR: Corrupt data

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

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

最佳答案

这似乎是至少 8.4 和 9.0 中的一个已知错误。我过去通过避免使用密码功能并使用 pgp_sym_encryptpgp_sym_decrypt 来管理 key 的密码来避免这种情况。

一般来说,如果这给您带来问题,您最好的选择是使用经过良好测试的函数分别使用密码短语加密 key 。

让您了解我们是如何做到的:

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 *;
$$;

请注意,发送到服务器的私钥不得使用密码加密。我们实际上可能会在服务器或中间件中生成它以避免出现问题。这可以避免您遇到的那种错误。

关于postgresql - pgcrypto Postgresql PGP pgp_pub_decrypt 带密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com