使用Openssl验证签名文档



我已经有了包含消息数据的msg.txt。我有sign.txt与签名后获得的签名数据与一些私钥,我没有。I pub-key.txt,其中包含用于验证散列的公钥。我无法编写openssl命令来验证签名的文本。

我认为应该是openssl dgst -sha256 -verify pub-key.txt -signature sign.txt msg.txt

,但我得到以下错误:

Error Verifying Data
12988:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:.cryptoasn1tasn_dec.c:1327:
12988:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:.cryptoasn1tasn_dec.c:381:Type=ECDSA_SIG

您的pub-key.txt是有效的PEM密钥吗?你的sign.txt是二进制签名文件吗?看来你的文件有问题了。

openssl verify命令与ECDSA签名有关。您可以尝试使用自签名密钥对在本地签名并验证并了解您的错误。

Create a private key called private.pem:
openssl ecparam -name secp256k1 -genkey -noout -out private.pem
Take a public key from it:
openssl ec -in private.pem -pubout -out public.pem
Sign a txt file and get a sign.bin:
openssl dgst -sha256 -sign private.pem msg.txt > sign.bin

看这里sign.bin是一个DER编码的二进制文件。你可以用:

openssl asn1parse -inform DER -in sign.bin

正确的输出如下所示,当然有不同的值:

0:d=0 hl=2 l= 69 cons: SEQUENCE
2:d=1 hl=2 l= 33 prim: INTEGER:AEF7E3F8C6E15EDA0D18F0E8F8F6483954A6CCF3FF5BD9B321DD2D72C9499E8F37:d=1 hl=2 l= 32 prim: INTEGER:7C3F30E8234A24ABD84BFD3375379DD7568330E82F4AD8ED69CE91D108918DCE

验证你的msg.txt与sign.bin是否一致,运行:

openssl dgst -sha256 -verify public.pem -signature sign.bin msg.txt

,你会得到:验证好了

最新更新