Ich versuche, eine verschlüsselte Standard-Realm-Instanz in meiner App einzurichten. Die Idee ist, einen Schlüssel mit einem KeyPairGenerator mit einem bestimmten Alias zu generieren, speichern Sie es in AndroidKeyStore und verwenden Sie den Schlüssel jedes Mal, wenn es benötigt wird.Bereich mit Schlüssel verschlüsseln, der in KeyStore gespeichert wird
, was ich tun
Dies ist, wie ich den Schlüssel erzeugen:
KeyStore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
if (!ks.containsAlias(KEY_ALIAS)) {
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
end.add(Calendar.YEAR, 99);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(this)
.setAlias(KEY_ALIAS)
.setSubject(new X500Principal("CN=Example, O=ExampleOrg"))
.setSerialNumber(BigInteger.ONE)
.setStartDate(start.getTime())
.setEndDate(end.getTime())
.build();
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
generator.initialize(spec);
KeyPair keyPair = generator.generateKeyPair();
}
Ich bin mit dem KeyPairGenerator als i api Versionen 18 und höher unterstützen müssen.
Hier ist, wie ich mein Setup Standard-Realm Beispiel in meiner Anwendung:
RealmConfiguration config = null;
try {
config = new RealmConfiguration
.Builder(this)
.encryptionKey(ks.getKey(KEY_ALIAS, null).getEncoded())
.name("dealmatrix.realm")
.schemaVersion(1)
.build();
wo ks eine Schlüsselspeicher-Instanz wie so erworben wird:
Keystore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
WAS FALSCH GOES
Mein Problem ist, dass dieser Ausdruck:
ks.getKey(KEY_ALIAS, null).getEncoded()
gibt null zurück, was verständlicherweise zu einer Ausnahme führt.
Ich habe online gelesen, dass dies das beabsichtigte Verhalten des KeyStore-Systems ist.
Wenn ich tatsächlich nicht in der Lage bin, das Byte-Array des gespeicherten Verschlüsselungsschlüssels zu erhalten, wie soll ich mein Realm mit diesem Schlüssel verschlüsseln?
Gibt es andere Methoden, um einen Verschlüsselungsschlüssel sicher zu speichern, damit ich ihn in meiner Realmkonfiguration verwenden kann?
Haben Sie irgendeine Lösung herausgefunden, ich bin auch mit diesem Problem konfrontiert – saikrupa