验证 jsrsasign ECDSA 示例 Web 和 openssl 工具之间的签名问题

Verify signature issue between jsrsasign ECDSA sample web and openssl tool

提问人:Xinwei Gong 提问时间:10/24/2023 更新时间:10/24/2023 访问量:29

问:

我按照“https://kjur.github.io/jsrsasign/sample/sample-ecdsa.html”中的步骤操作:

openssl ecparam -genkey -name secp256r1 -out k.pem

我得到:

"using curve name prime256v1 instead of secp256r1"

然后

    $ openssl ec -in k.pem -noout -text
read EC key
Private-Key: (256 bit)
priv:
    f5:01:5a:53:76:9d:b2:85:05:fc:0f:1f:70:ea:f1:
    a3:ec:59:ef:69:23:74:cf:bf:4d:7f:31:c3:8d:1b:
    96:bb
pub:
    04:e5:8c:01:e7:1a:a7:67:cd:5a:ec:d1:5b:8e:40:
    1b:98:d2:e1:db:92:dc:a0:22:07:4b:ea:17:71:c6:
    b6:f0:3f:81:2d:7e:b4:b4:d1:51:50:82:d6:36:f2:
    81:ec:65:e9:77:e1:12:59:43:25:94:1b:dc:94:48:
    31:a1:bb:86:17
ASN1 OID: prime256v1
NIST CURVE: P-256

然后,我将“f5015a53769db28505fc0f1f70eaf1a3ec59ef692374cfbf4d7f31c38d1b96bb”填写到Web EC私钥(十六进制),将“04e58c01e71aa767cd5aecd15b8e401b98d2e1db92dca022074bea1771c6b6f03f812d7eb4b4d1515082d636f281ec65e977e112594325941bdc944831a1bb8617”填写到EC公钥(十六进制)。

将消息保留在“aaa”中,曲线名称为 secp256r1,签名算法在 SHA256 中使用 ECDSA。

然后点击签名消息,现在我得到一个签名值(十六进制): “3045022035721330a91c3c6d861c7a23815ea22a4eba12c8dc892800b6493364e24ec266022100de0fc18d0eed05e204786732de1c44b2e78cd53ecbf6e110c501d94ebd36f162”

然后我通过以下方式将其更改为签名 bin 文件:

printf "3045022035721330a91c3c6d861c7a23815ea22a4eba12c8dc892800b6493364e24ec266022100de0fc18d0eed05e204786732de1c44b2e78cd53ecbf6e110c501d94ebd36f162" | xxd -r -p > web_sign.bin 

echo "aaa" > message.txt
openssl ec -in k.pem -pubout -out pk.pem

最后,我使用文件来验证签名:

openssl dgst -sha256 -verify pk.pem -signature web_sign.bin message.txt

但我明白了:

Verification failure

我花了很长时间进行调试,但我真的不知道我的过程中出了什么问题。

提前感谢您的帮助。

OpenSSL 签名 ECDSA

评论

1赞 dave_thompson_085 10/25/2023
echo 添加换行符,除非您有一个支持(并非所有版本都支持)并且您使用它(您没有)。这个问题至少被问了一百次,回答了一百次。如果您希望验证您的签名,请不要添加换行符-n
0赞 Xinwei Gong 10/25/2023
@dave_thompson_085非常感谢戴夫。我不敢相信我忽略了这个换行符问题。删除 NEWLINE 后,它确实对我有用!

答: 暂无答案