首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin将PKCS1转换为PKCS8

Kotlin将PKCS1转换为PKCS8
EN

Stack Overflow用户
提问于 2018-10-29 12:46:44
回答 1查看 636关注 0票数 1

我用这种方式生成私钥:

代码语言:javascript
复制
val keyPairGenerator = KeyPairGenerator.getInstance("ECDSA", "SC")
val spec = ECGenParameterSpec("secp256k1")
keyPairGenerator.initialize(spec, SecureRandom())
keyPairGenerator.genKeyPair()
val kp = keyPairGenerator.generateKeyPair()

我得到144长度私钥。然后,我将私钥转换为PKCS1格式:

代码语言:javascript
复制
val pkInfo = PrivateKeyInfo.getInstance(kp.private.encoded)
val encodable = pkInfo.parsePrivateKey()
val primitive = encodable.toASN1Primitive()
val pkcs1 = primitive.encoded //118 length here

在这种情况下,我需要将pkcs1转换回pkcs8。对我来说还不清楚。找不到任何可行的解决方案。有可能吗?

发现了P.S. pkcs8到pkcs1变换的这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-01 21:49:27

如前所述,私钥采用X9.62格式。它不能是PKCS#1格式,因为该格式指定的是RSA,而不是ECC。

此外,您的PKCS#8私钥比您从其中提取的X9.62格式的私钥包含更多的信息。您可以看到PKCS#8 这里的解码。

代码语言:javascript
复制
SEQUENCE (3 elem)
  INTEGER 0
  SEQUENCE (2 elem)
    OBJECT IDENTIFIER 1.2.840.10045.2.1 ecPublicKey (ANSI X9.62 public key type)
    OBJECT IDENTIFIER 1.3.132.0.10 secp256k1 (SECG (Certicom) named elliptic curve)
  OCTET STRING (1 elem)
    SEQUENCE (4 elem)
      INTEGER 1
      OCTET STRING (32 byte) 9CDDA50E9E839066257291DBCBDBD9A8A177F350AA522A128163AB7E955622C5
      [0] (1 elem)
        OBJECT IDENTIFIER 1.3.132.0.10 secp256k1 (SECG (Certicom) named elliptic curve)
      [1] (1 elem)
        BIT STRING (520 bit) ... the optional public key ...

内部的X9.62键是八进制字符串中的序列,秘密(S)是32字节的八进制字符串。

所以你得把信息加回去。这是一个AlgorithmIdentifier,它指示ecPublicKey操作以及使用的曲线(对公钥重复)。

因此,无需进一步考虑,重新创建PKCS#8结构的操作(用x962替换pkcs1):

代码语言:javascript
复制
ASN1Primitive prim = ASN1Primitive.fromByteArray(x962);
PrivateKeyInfo keyInfo = new PrivateKeyInfo(new AlgorithmIdentifier(
        X9ObjectIdentifiers.id_ecPublicKey,
        SECObjectIdentifiers.secp256k1), prim);

请注意,这是PKCS#8的非加密变体,它只显示私钥类型。加密变体对此结构进行加密,并添加有关已使用的包装机制的信息(例如,加密的AES )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53045840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档