【发布时间】:2019-04-02 09:43:12
【问题描述】:
我是这样生成私钥的:
val keyPairGenerator = KeyPairGenerator.getInstance("ECDSA", "SC")
val spec = ECGenParameterSpec("secp256k1")
keyPairGenerator.initialize(spec, SecureRandom())
keyPairGenerator.genKeyPair()
val kp = keyPairGenerator.generateKeyPair()
我得到了144 长度的私钥。然后我将我的私钥转换为PKCS1 格式:
val pkInfo = PrivateKeyInfo.getInstance(kp.private.encoded)
val encodable = pkInfo.parsePrivateKey()
val primitive = encodable.toASN1Primitive()
val pkcs1 = primitive.encoded //118 length here
在某些情况下,我需要将 pkcs1 转换回 pkcs8。这对我来说还不清楚。找不到任何可行的解决方案。有没有可能?
附:发现pkcs8到pkcs1的转换here
【问题讨论】:
-
PKCS#1 定义了 RSA 格式。您可能正在使用 X9.62 格式的私钥。 PKCS#8 包含此密钥,因此将其转换为 X9.62 可能比其他方式更容易/
-
不确定我是否理解你。根据 secp256k1 我原来的私钥不是 X9.62 格式的。还是您的意思是 PKCS1 格式的密钥?
-
同样,PKCS#1 在这里不起作用。 PKCS#1 代表 RSA 实验室的公钥加密标准。 #1 指定 RSA 本身。您可以在线阅读 RFC。它实际上与ECC无关。只有 RSA 公钥和私有密钥可以使用 PKCS#1 存储,并且可以用 PKCS#8 包装以指示密钥类型并可能对它们进行加密。 PKCS#8 也可用于包装其他格式,例如 X9.62 密钥,通常是 Prime 曲线或 Koblitz 曲线。
-
Thnx,但我仍然不知道该怎么做。
标签: java encryption kotlin private-key pkcs#8