【问题标题】:java.security.KeyPairGenerator: Can't set .setDigests() and invalid private keyjava.security.KeyPairGenerator:无法设置 .setDigests() 和无效的私钥
【发布时间】:2021-09-28 02:10:21
【问题描述】:

我目前正在使用 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 android nativescript java-security


    【解决方案1】:

    如果您访问 Java 安全文档,它会说函数 setDigests() 采用摘要类型数组,而不是逗号分隔的参数。您发布的指南中给出的示例有错误。

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2015-07-07
      • 2012-11-07
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2013-05-13
      • 1970-01-01
      相关资源
      最近更新 更多