- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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 生成私钥时,出现以下异常:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c000079:ASN.1 encoding routines:OPENSSL_internal:HEADER_TOO_LONG at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
在这种情况下如何正确读取私钥?
最佳答案
我使用 BouncyCaSTLe 作为安全提供程序,因此您也可以尝试一下。看起来您使用的规范是 secp256r1
。在这种情况下,请尝试使用以下代码从表示 key 的字节数组中重新生成 PrivateKey 对象。请记住,字节数组在 Java 中只是一个 BigInteger。
让我知道它是否有效。
public PrivateKey generatePrivateKey(byte[] keyBin) throws InvalidKeySpecException, NoSuchAlgorithmException {
ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp256r1");
KeyFactory kf = KeyFactory.getInstance("ECDSA", new BouncyCastleProvider());
ECNamedCurveSpec params = new ECNamedCurveSpec("secp256r1", spec.getCurve(), spec.getG(), spec.getN());
ECPrivateKeySpec privKeySpec = new ECPrivateKeySpec(new BigInteger(keyBin), params);
return kf.generatePrivate(privKeySpec);
}
关于android - ASN.1 编码例程 :OPENSSL_internal:HEADER_TOO_LONG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638955/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!