gpt4 book ai didi

postgresql - 有没有办法在 Postgres 中验证签名的摘要?

转载 作者:行者123 更新时间:2023-11-29 13:48:41 24 4
gpt4 key购买 nike

运行了以下命令,并将 content_file、signature_file 和 id_rsa.pub(或 pem)的内容插入到 Postgres 数据库中。

openssl dgst -sign id_rsa content_file > signature_file

有什么方法可以验证签名是否与 Postgres 中的内容/公钥相对应?

我看过 pgcrypto函数,但是唯一相关的函数似乎是 pgp_pub_decrypt,它需要 key 。

基本上我希望在 Postgres 中执行以下操作:

openssl dgst -verify .\id_rsa.pem -signature .\signature_file .\content_file

最佳答案

根据 Craig 的建议,我最终使用 plpythonu 来解决这个问题。

CREATE OR REPLACE FUNCTION api.verify(
p_data text,
p_signature text,
p_publickey text
)
RETURNS boolean AS
$$
try:
import rsa

pubkey = rsa.PublicKey.load_pkcs1(p_publickey)
signature = bytearray.fromhex(p_signature)
verified = rsa.verify(p_data, signature, pubkey)

return verified
except:
return False

$$ LANGUAGE plpythonu VOLATILE
SECURITY DEFINER;

由于我缺乏 python 知识,其中最困难的部分实际上是设置所需的 python 包(在我的例子中是 Docker 环境)。以下是 Dockerfile 的相关摘录:

FROM postgres:9.6

# Install necessary python packages to work with postgres
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
"postgresql-plpython-$PG_MAJOR" \
&& apt-get install -y python-pip python-dev

# Install python rsa module for signature verification
RUN pip install rsa

函数在给定以下参数的情况下工作:

-- Generate private key. Provide secure passphrase when prompted.
openssl genrsa -aes256 -out private.pem 4096

--Export public KEY
openssl rsa -in private.pem -RSAPublicKey_out -out public.pem

--Sign data. Provide secure passphrase when prompted.
--Remove first line (RSA-SHA256(data.txt)=) when passing into database verify function.
openssl dgst -hex -sign private.pem data.txt > signature.txt

关于postgresql - 有没有办法在 Postgres 中验证签名的摘要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418256/

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