2016-08-24 9 views
14

Szyfruję dane w mojej aplikacji za pomocą klucza RSA przechowywanego w magazynie kluczy systemu Android.Łańcuch ma wartość NULL podczas pobierania klucza prywatnego

Spotykam NullPointerException S w Sklepie Play, ale nie byłem w stanie odtworzyć je:

java.lang.NullPointerException: chain == null 
    at java.security.KeyStore$PrivateKeyEntry.<init>(KeyStore.java:1205) 
    at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:374) 
    at java.security.KeyStore.getEntry(KeyStore.java:644) 
    at MyClass.getKeyStoreEntry(MyClass.java:111) 

Źródłem kod, aby utworzyć parę kluczy

Calendar start = Calendar.getInstance(); 
start.setTimeInMillis(0); 
Calendar end = Calendar.getInstance(); 
end.set(Calendar.YEAR, 3000); 

KeyPairGeneratorSpec.Builder keySpecBuilder = new KeyPairGeneratorSpec.Builder(context) 
    .setAlias(keyName) 
    .setSubject(new X500Principal("CN=" + keyName)) 
    .setSerialNumber(BigInteger.TEN) 
    .setStartDate(start.getTime()) 
    .setEndDate(end.getTime()) 
    .setKeySize(RSA_KEY_SIZE); 

KeyPairGeneratorSpec spec = keySpecBuilder.build(); 
KeyPairGenerator gen = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); 
gen.initialize(spec); 
gen.generateKeyPair(); 

A potem Aby odzyskać klucz:

private KeyStore.PrivateKeyEntry getKeyStoreEntry() { 
    KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE); 
    keyStore.load(null); 

    if (!keyStore.containsAlias(keyName)) { 
     throw new KeyNotFoundException(); 
    } 
    return (KeyStore.PrivateKeyEntry) keyStore.getEntry(keyName, null); 
} 

Dzieje się tak tylko wtedy, gdy korzystam z KeyPairGeneratorSpec na poziomie interfejsu API 19-22. Implementacja 23+ działa dobrze.

I do not have another key with the same name i również nie mam deleted the key.

+0

Czy kiedykolwiek miałeś szczęście? –

+0

@RED_ no - W końcu powróciłem do starszej implementacji, jeśli się nie udało – AesSedai101

Odpowiedz

1

Sądzę, że po prostu masz do czynienia z problemami z Keystore. Zobacz ten artykuł na przykład: Android Security: The Forgetful Keystore. Istnieją również liczne raporty o błędach w narzędziu do śledzenia Androida związane z plikiem kluczy, takie jak AndroidKeyStore deleted after changing screen lock type.

+0

Umieściłem obejścia dla tego miejsca (jeśli klucz nie istnieje w magazynie kluczy, który go odtwarzam), więc niestety to nie jest problem – AesSedai101

Powiązane problemy