有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java与ECC公钥的长度混淆

我正在尝试查找ECC公钥的长度。我读到ECC的公钥大约是64字节。我试着自己测试这个,但结果与普通的不同。前提是我使用本规范(secp256k1)。下面给出了我用来计算公钥长度的代码

字节publicKeyLength[]=pk。getEncoded()

系统。出来println(“PK的长度为”+publickeyngth.Length);//它打印了311条是吗

正如我在这个论坛上读到的,它应该是64字节。但为什么当我测试它时,它给出了311字节


共 (1) 个答案

  1. # 1 楼答案

    如果您参考rfc5480,您将看到从PublicKey::getEncoded方法获得的字节实际上是按顺序编码的SubjectPublicKeyInfo

    SubjectPublicKeyInfo  ::=  SEQUENCE  {
           algorithm         AlgorithmIdentifier,
           subjectPublicKey  BIT STRING
    }
    

    并且subjectPublicKey将是DER八进制字符串编码的ECPublicKey,该密钥由第一个字节组成,该字节是确定密钥是否被压缩的on,然后是公钥EC点的X,Y坐标

    X,Y场的长度取决于定义点的曲线。对于曲线,每个坐标为32字节。因此,在未压缩形式下,原始密钥将有65个字节(1+32+32)。压缩和未压缩表单之间的差异已在this SO question中解释