【问题标题】:How can I generate PrivateKey from NIST P-256 string private key In android如何从 NIST P-256 字符串私钥在 android 中生成 PrivateKey
【发布时间】:2021-07-06 11:51:34
【问题描述】:

我有字符串格式的私钥。它的类型是 NIST P-256,它看起来像这样:

-----BEGIN PRIVATE KEY----- 
MIGH...
HQ9+...
ZYrJ...
-----END PRIVATE KEY-----

我删除了带有页脚和空格的页眉。

我有:

import java.security.KeyFactory
import java.security.PrivateKey
import java.security.spec.PKCS8EncodedKeySpec

val privateKeyString = "myKey"
val sigBytes: ByteArray = Base64Utils.decode(privateKeyString)

val privateKeySpec = PKCS8EncodedKeySpec(sigBytes)
val keyFactory = KeyFactory.getInstance("RSA")

val privateKey : PrivateKey = keyFactory.generatePrivate(privateKeySpec)

我在哪里得到:

Caused by: 
java.security.spec.InvalidKeySpecException: Unexpected key type

我看到了一种移除人员的方法

-----开始私钥-----和 -----结束私钥-----

但这无济于事。 可能我应该使用与 PKCS8EncodedKeySpec 不同的东西 但我不确定,请有人帮助我)

【问题讨论】:

  • 您应该在 Base64 解码之前删除页眉、页脚和换行符。然后PKCS8EncodedKeySpec() 的实例化应该实际工作。你确定钥匙没问题?
  • @user9014097 我更新了问题信息。我有一些空格,但在删除它们后出现新错误Caused by: Unexpected key type
  • 您是否也删除了换行符?你能发布一个测试密钥吗?
  • @ user9014097确保测试一个看起来像这样:MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg0m4yLz + sdzZtBG9QHQ9 ++ wcfq1O4hOWgSBMb / A6eijyhRANCAAQeB0fBl2D7HZOKVBjpPiU2jabzNxQUZYrJ + MSA3LpzZxmRk2JaFHNujjkJghQT19HHjg3Fnkb8Y9oIhB9neXBI 跨度>
  • 试试KeyFactory.getInstance("EC"),你没有使用RSA。

标签: android kotlin security rsa private-key


【解决方案1】:

要导入的私钥是 PKCS#8 格式的 PEM 编码密钥。 PKCS8EncodedKeySpec() 需要一个 DER 编码的密钥,该密钥通过删除页眉、页脚和换行符以及 Base64 解码其余部分从 PEM 编码的密钥派生而来。

由于要导入 EC 密钥,因此必须将 EC 指定为算法而不是 RSA:

val keyFactory = KeyFactory.getInstance("EC")

【讨论】:

    猜你喜欢
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2017-02-07
    • 1970-01-01
    • 2013-08-24
    • 2019-09-04
    • 2015-09-25
    相关资源
    最近更新 更多