相关疑难解决方法(0)

无法在Samsung android上初始化密钥库

编辑:我现在在非三星KitKat 4.4.3设备(Gigabyte/Zebra TC55)上看到此错误.

我试图KeyStore在我的自定义X509TrustManager类中初始化null .在构造函数中,我执行以下操作:

public EasyX509TrustManager(KeyStore keystore) throws NoSuchAlgorithmException, KeyStoreException, IOException, CertificateException {
    super();
    //keystore.load(null);
    TrustManagerFactory factory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    factory.init((KeyStore) null); <--- ERROR HERE
    TrustManager[] trustmanagers = factory.getTrustManagers();
    if (trustmanagers.length == 0) {
        throw new NoSuchAlgorithmException("no trust manager found");
    }
    this.standardTrustManager = (X509TrustManager) trustmanagers[0];
}
Run Code Online (Sandbox Code Playgroud)

并获得以下堆栈跟踪:

 java.security.KeyStoreException: initialization failed
    at org.spongycastle.jsse.provider.ProvTrustManagerFactorySpi.engineInit(ProvTrustManagerFactorySpi.java:127)
    at javax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:191)
    at my.android.app.http.EasyX509TrustManager.<init>(EasyX509TrustManager.java:51)
    at my.android.app.http.EasySSLSocketFactory.createEasySSLContext(EasySSLSocketFactory.java:53)
    at my.android.app.http.EasySSLSocketFactory.getSSLContext(EasySSLSocketFactory.java:83)
    at my.android.app.http.EasySSLSocketFactory.createSocket(EasySSLSocketFactory.java:133)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509)
    at …
Run Code Online (Sandbox Code Playgroud)

android bouncycastle samsung-mobile spongycastle

7
推荐指数
1
解决办法
368
查看次数

使用Android Keystore生成密钥的任何无异常成功案例?

鉴于Android Keystore存在许多已知问题及其丢失数据的能力,或者只是普遍失败(请参见此处,此处,此处,此处,此处此处),我很想知道是否有任何开发人员实际使用过Android Keystore在用于生成密钥的实时应用程序中,还没有遇到与Keystore无法从密钥库创建或检索密钥相关的大量崩溃报告?你是如何解决已知问题的?我特别感兴趣的是,KeyPairGenerator该类用于生成不需要用户身份验证的私钥 - 公钥对(即不需要在设备上设置屏幕锁定).

编辑:我在下面列出了我用于通过Android Keystore生成私钥 - 公钥对的代码:

KeyPair createPrivateKeyEntry(@NonNull Context context,
                              @NonNull String keyAlias) throws CryptoException {
    try {
        AlgorithmParameterSpec spec = getAlgorithmParameterSpec(context, keyAlias);

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(
                "RSA",
                "AndroidKeyStore"
        );

        keyPairGenerator.initialize(spec);
        return keyPairGenerator.generateKeyPair();
    } catch (Exception e) {
        String message = "Unexpected error when attempting to create a private key entry.";
        throw new CryptoException(message, e);
    }
}

private AlgorithmParameterSpec getAlgorithmParameterSpec(@NonNull Context context, …
Run Code Online (Sandbox Code Playgroud)

android android-keystore

5
推荐指数
0
解决办法
214
查看次数

Android android.credentials.UNLOCK 在没有密码的情况下初始化密钥库

有一个随机密钥来通过 AES 加密本地凭据,我正在按照以下教程尝试安全地存储该密钥,然后能够在以后解密:

nelenkov.blogspot.co.uk 在 android 中存储应用程序机密

本教程解释了如何访问系统密钥库并将密码存储在其中。

我面临的问题集中在调用UNLOCK ( android.credentials.UNLOCK ) KeyStore 上。未初始化 KeyStore 的设备(目前 API 低于 14),它们会显示一个对话框,要求输入 8 位密码。

本教程运行良好,但是显示此对话框甚至只显示一次,它会打扰大多数用户。

有什么办法可以跳过这个对话框吗?

如果有人描述了一种在本地保留密钥的更好方法,我会更高兴。

encryption android credentials aes android-keystore

3
推荐指数
1
解决办法
5920
查看次数