OpenSSL ECDSA 签名并验证文件

OpenSSL ECDSA 签名并验证文件

我想用椭圆曲线签名并验证 PDF。我有一些代码,但是不起作用。

创建私钥:

openssl ecparam -genkey -name secp384r1 -noout -out private.pem

创建公钥:

openssl ec -in private.pem -pubout -out public.pem

签名文件:

openssl dgst -ecdsa-with-SHA1 test.pdf > hash openssl dgst
openssl dgst -ecdsa-with-SHA1 -inkey private.pem -keyform PEM -in hash > signature

验证文件:

openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin data

签名和验证部分不起作用。

答案1

我认为您实际上并不是在签署文件,而是在签署哈希。

我尝试了以下操作并得到了所需的输出:

Create signature:
openssl dgst -ecdsa-with-SHA1 -sign private.pem test.pdf > signature.bin

Verify signature:
openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin test.pdf

答案2

由于 -ecda-with-SHA1 不在 dgst 的手册中,并且没有 -ecda-with-SHA256,我建议:

符号 :

openssl dgst -sha1 -sign private.pem test.pdf > signature.bin

核实 :

openssl dgst -sha1 -verify public.pem -signature signature.bin test.pdf

答案3

或者如果您需要引擎,您也可以在 OpenSSL 会话中执行此操作:

openssl
OpenSSL> engine -vvvv -t dynamic -pre SO_PATH:someengine.so -pre ID:someengine -pre LIST_ADD:1 -pre LOAD
OpenSSL> dgst -ecdsa-with-SHA1 -out signature.bin -sign private.pem test.pdf
OpenSSL> dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin test.pdf

数据表也提供-engine选项,但这里需要先加载引擎。如果需要,只需添加-engine someengine

相关内容