【发布时间】:2018-12-05 18:53:54
【问题描述】:
我在从 Kotlin 的字节数组中重新构造私钥时遇到问题(使用 Android Studio)
我必须加载我在下面定义的私钥。 据我所知,这个 EC 私钥长 32 个字节,对应 secp256r1 曲线
0x3C, 0x6D, etc... (this have 32 in total)
这就是我所拥有的:
val privateKeyArray = arrayOf(0x3C, 0x6D, etc...) //this have 32 size
然后我尝试将其转换为 byteArray:
val privateKeyBytes = privateKeyArray.map { it.toByte() }.toByteArray())
然后我想用它签署一些数据:
val keyFactory = KeyFactory.getInstance("EC")
val privateKey = keyFactory.generatePrivate(PKCS8EncodedKeySpec(privateKeyBytes)) //THIS line gives the Exception
val content = "random string".toByteArray()
val signer = Signature.getInstance("SHA256withECDSA")
signer.initSign(privateKey)
signer.update(content)
val signature = signer.sign()
但是,当我尝试从 keyFactory 生成 privateKey 时,出现以下异常:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: 错误:0c000079:ASN.1 编码例程:OPENSSL_internal:HEADER_TOO_LONG 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
在这种情况下如何正确读取私钥?
【问题讨论】:
-
请不要用cmets来请别人回答你的问题。这些 cmets 已在整个网站上被标记和删除。
标签: android encryption kotlin bouncycastle private-key