java与ECC公钥的长度混淆
我正在尝试查找ECC公钥的长度。我读到ECC的公钥大约是64字节。我试着自己测试这个,但结果与普通的不同。前提是我使用本规范(secp256k1)。下面给出了我用来计算公钥长度的代码
字节publicKeyLength[]=pk。getEncoded()
系统。出来println(“PK的长度为”+publickeyngth.Length);//它打印了311条是吗
正如我在这个论坛上读到的,它应该是64字节。但为什么当我测试它时,它给出了311字节
你可以在下面搜索框中键入要查询的问题!
我正在尝试查找ECC公钥的长度。我读到ECC的公钥大约是64字节。我试着自己测试这个,但结果与普通的不同。前提是我使用本规范(secp256k1)。下面给出了我用来计算公钥长度的代码
字节publicKeyLength[]=pk。getEncoded()
系统。出来println(“PK的长度为”+publickeyngth.Length);//它打印了311条是吗
正如我在这个论坛上读到的,它应该是64字节。但为什么当我测试它时,它给出了311字节
# 1 楼答案
如果您参考rfc5480,您将看到从
PublicKey::getEncoded
方法获得的字节实际上是按顺序编码的SubjectPublicKeyInfo
:并且
subjectPublicKey
将是DER八进制字符串编码的ECPublicKey,该密钥由第一个字节组成,该字节是确定密钥是否被压缩的on,然后是公钥EC点的X,Y坐标X,Y场的长度取决于定义点的曲线。对于曲线,每个坐标为32字节。因此,在未压缩形式下,原始密钥将有65个字节(1+32+32)。压缩和未压缩表单之间的差异已在this SO question中解释