java.security.KeyPairGenerator: 无法设置 .setDigests() 和无效的私钥
java.security.KeyPairGenerator: Can't set .setDigests() and invalid private key
我目前正在使用 Nativescript-Vue 开发一个 Android 应用程序,我想在其中生成一个私钥来签署有效负载。
const KPGen = java.security.KeyPairGenerator;
const keyP = android.security.keystore.KeyProperties;
const kpg = KPGen.getInstance(keyP.KEY_ALGORITHM_EC, "AndroidKeyStore");
const builder = new android.security.keystore.KeyGenParameterSpec.Builder(
"key1", keyP.PURPOSE_SIGN)
.setAlgorithmParameterSpec(new java.security.spec.ECGenParameterSpec("secp256r1"))
.setDigests(keyP.DIGEST_SHA256)
kpg.initialize(builder.build());
const kp = kpg.generateKeyPair();
如果我保留 .setDigests(keyP.DIGEST_SHA256)
应用程序将抛出错误:
Error: java.lang.Exception: Failed resolving method setDigests on class android.security.keystore.KeyGenParameterSpec$Builder
.
但是,如果我注释掉 .setDigests(keyP.DIGEST_SHA256)
行,那么当我尝试在签名
上初始化签名时,我会得到一个 Error: java.security.InvalidKeyException: Keystore operation failed
const sig = java.security.Signature.getInstance('SHA256withECDSA');
sig.initSign(kp.getPrivate());
我不确定这两个问题是否相关,但有谁知道目前出了什么问题吗?
我正在关注以下示例:https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec
如果您查看 Java 安全文档,它说函数 setDigests() 采用摘要类型数组,而不是逗号分隔参数。您发布的指南中给出的示例有错误。
我目前正在使用 Nativescript-Vue 开发一个 Android 应用程序,我想在其中生成一个私钥来签署有效负载。
const KPGen = java.security.KeyPairGenerator;
const keyP = android.security.keystore.KeyProperties;
const kpg = KPGen.getInstance(keyP.KEY_ALGORITHM_EC, "AndroidKeyStore");
const builder = new android.security.keystore.KeyGenParameterSpec.Builder(
"key1", keyP.PURPOSE_SIGN)
.setAlgorithmParameterSpec(new java.security.spec.ECGenParameterSpec("secp256r1"))
.setDigests(keyP.DIGEST_SHA256)
kpg.initialize(builder.build());
const kp = kpg.generateKeyPair();
如果我保留 .setDigests(keyP.DIGEST_SHA256)
应用程序将抛出错误:
Error: java.lang.Exception: Failed resolving method setDigests on class android.security.keystore.KeyGenParameterSpec$Builder
.
但是,如果我注释掉 .setDigests(keyP.DIGEST_SHA256)
行,那么当我尝试在签名
Error: java.security.InvalidKeyException: Keystore operation failed
const sig = java.security.Signature.getInstance('SHA256withECDSA');
sig.initSign(kp.getPrivate());
我不确定这两个问题是否相关,但有谁知道目前出了什么问题吗?
我正在关注以下示例:https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec
如果您查看 Java 安全文档,它说函数 setDigests() 采用摘要类型数组,而不是逗号分隔参数。您发布的指南中给出的示例有错误。