So speichern Sie den Schlüssel mithilfe des Android Key Store Providers

8

Ich versuche den Android Key Store Provider zu verwenden, der in Android 4.3 verfügbar war, um einen privaten Schlüssel sicher zu speichern und diesen privaten Schlüssel dann zum Verschlüsseln und Decodieren von Daten zu verwenden.

Ich denke, ich habe den richtigen Ansatz und Code dafür implementiert, aber ich stehe derzeit vor einem seltsamen Problem, das ich nicht verstehen kann.

Ich habe eine Klasse namens KeyStorage, die ich verwende, um das Schlüsselpaar zu erstellen, den KeyStore zu laden und den privaten Schlüssel abzurufen. Der Code für diese Klasse lautet wie folgt:

%Vor%

Ich habe dann eine Klasse namens CredentialStore, in der ich versuche, das zu verwenden. Ich erstelle einen Alias ​​namens "MySecureKey" und versuche, einen privaten Schlüssel darauf zu erstellen und zu speichern. Wie Sie sehen können, versuche ich das neue Schlüsselpaar basierend auf dem Alias ​​zu erstellen, lade den Schlüsselspeicher und schließlich den privaten Schlüssel. Es funktioniert jedoch nicht.

%Vor%

Ich bekomme die Protokolle wie folgt:

%Vor%

Wenn ich also die Aliase in der loadKeyStore-Methode überprüfe, sieht es so aus, als wäre es da, wenn es im Log zurückkommt. Wenn ich jedoch versuche, es mit der loadKeyStore-Methode aufzurufen, bekomme ich das Protokoll, dass es den Schlüssel "MySecureKey" nicht finden kann.

Ich kann keinen Grund dafür finden und die Online-Recherche hat sich als unfruchtbar erwiesen, also habe ich mich gefragt, ob jemand eine Idee hat, was schief gehen könnte?

    
Donal Rafferty 25.09.2014, 15:28
quelle

3 Antworten

1

Warum ist es blueBirdKeyStore in:

%Vor%

Sollte es nicht sein:

%Vor%

Außerdem haben Sie in Ihrem loadPrivateKey () nicht den Alias ​​verwendet:

%Vor%

Nun, ich bin mir nicht sicher, aber sollten Sie nicht den 'Alias' in diesem verwenden?

    
Sid 30.06.2016 14:34
quelle
1

Ihre Methode, um zu überprüfen, ob Ihr Schlüssel existiert, ist fehlerhaft:

%Vor%

Laut javadoc .isKeyEntry() hat das folgende Verhalten

  

Gibt true zurück, wenn der mit dem angegebenen Alias ​​angegebene Eintrag von erstellt wurde   Ein Aufruf von setKeyEntry, oder erstellt durch einen Aufruf von setEntry mit a   PrivateKeyEntry oder ein SecretKeyEntry.

aber Ihr Schlüssel wurde nicht durch setEntry() erstellt. Ich denke, wenn Sie nur den Schlüssel mit

laden %Vor%

es wird nicht null sein.

Hier ist ein vollständiges Beispiel mit einfachen Methoden zur Verwendung des Android Keystore mit Pre-M und M Apis.

    
for3st 21.09.2016 10:01
quelle
0

loadPrivateKey in Ihrer Klasse verwendet den "Alias" nicht, um den Schlüssel abzurufen. Es benutzt die Konstante einer anderen Klasse, also bin ich mir nicht sicher, was Sie hier erwarten.

    
user1135300 11.07.2016 21:30
quelle