【问题标题】:Why KeyPair.getPrivate().getEncoded() is null?为什么 KeyPair.getPrivate().getEncoded() 为空?
【发布时间】:2016-12-19 09:03:07
【问题描述】:
public KeyPair generateKeyPair(@NonNull Context context, @NonNull String alias) {
    Calendar startDate = Calendar.getInstance();
    Calendar endDate = Calendar.getInstance();
    endDate.add(Calendar.YEAR, 1);

    KeyPairGenerator keyPairGenerator;
    try {
        keyPairGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
        AlgorithmParameterSpec spec;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            spec = new KeyGenParameterSpec.Builder(alias, KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY)
                    .setCertificateNotBefore(startDate.getTime())
                    .setCertificateNotAfter(endDate.getTime())
                    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1)
                    .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512)
                    .build();
        } else {
            spec = new KeyPairGeneratorSpec.Builder(context)
                    .setAlias(alias)
                    .setSubject(new X500Principal("CN=fake"))
                    .setSerialNumber(BigInteger.ONE)
                    .setStartDate(startDate.getTime())
                    .setEndDate(endDate.getTime())
                    .build();
        }
        keyPairGenerator.initialize(spec);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return keyPairGenerator.generateKeyPair();
}

我知道 privateKey.getEncoded 可以为 null,但是如何获取 privateKey base64 值?

【问题讨论】:

  • 您找到解决此问题的方法了吗?

标签: android private-key


【解决方案1】:

如果您使用的是基于硬件加密设备AndroidKeyStore 的提供程序,则它已设置为不在其外部发布私钥。因此,私钥上的 Key.getEncoded() 实际上可能返回 null。更多详情here

【讨论】:

    猜你喜欢
    • 2015-06-01
    • 2013-10-30
    • 2015-06-30
    • 2016-07-11
    • 2012-12-17
    • 2013-09-21
    • 2012-02-15
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多