我想用椭圆曲线签名并验证 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
。