私钥:
7a01628988d23fa697fa05fcdae5a82fe4f749aa9f24d35d23f81bee917dfc3
消息:
695369676e65645468697344617461546861744973323536426974734c6f6e67
结果:
205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743
04ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36
预期结果:
304402205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743022004ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36
正如你所看到的,预期结果有两个片段,我的结果没有:
304402205587dfc87c3227ad37b021c08c873ca4b1faada1a83f666d483711edb2f4f743022004ee40d9fe8dd03e6d42bfc7d0e53f75286125a591ed14b39265978ebf3eea36
我在这里缺少的是,我的结果是否受到了一些压缩或发生了什么事情。
谢谢!
我不知道你是如何得到结果的,但预期的结果看起来像ASN.1/DER编码中的标准ECDSA签名。
分解:
-
30
:表示ASN.1SEQUENCE
将紧随其后 -
44
:序列的长度,在本例中为68字节 -
02
:表示ASN.1INTEGER
将紧随其后 -
20
:表示整数的长度,在本例中为32字节 -
55 ... 43
:签名的r
值的32字节 -
02
:表示ASN.1INTEGER
将紧随其后 -
20
:表示整数的长度,在本例中为32字节 -
04 ... 36
:签名的s
值的32字节
正如我所说,我不确定您当前所使用的结果是什么类型的编码。它似乎包含了从字节数组中提取r
和s
值所需的最低限度的信息,但放弃了其他所有信息。(我怀疑它可能是PER编码的某种变体或自定义编码方案。(
特别有趣的是,r
整数(20
(的长度指示符出现在您的结果中。除了实际的r
和s
值之外,这是能够成功解析签名所严格需要的唯一附加信息。由于r
和s
可能是32或33个字节,因此需要一个长度指示符来知道r
的结束位置和s
的开始位置。