'da depolanan anahtar ile Şifreleme Realm Uygulamamda bir şifreli varsayılan bölge örneği kurmaya çalışıyorum. Buradaki fikir, bir takma ad ile KeyPairGenerator kullanarak bir anahtar oluşturmak, AndroidKeyStore'da saklamak ve gerektiğinde her zaman anahtarını kullanmaktır. i API sürümlerini 18 ve üzeri desteklemek gerekiyor gibi KeyPairGenerator kullanıyorumKeyStore
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();
}
:
Ben
NE Bu şimdiye anahtarı oluşturmak nasıl.
RealmConfiguration config = null;
try {
config = new RealmConfiguration
.Builder(this)
.encryptionKey(ks.getKey(KEY_ALIAS, null).getEncoded())
.name("dealmatrix.realm")
.schemaVersion(1)
.build();
ks bir Keystore örneği şöyle elde edilir burada:: İşte
i tertibat benim Uygulamasında varsayılan bölge örneği nasıl
Keystore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
NE YANLIŞ
GOES Benim problemim şu ifadedir:
ks.getKey(KEY_ALIAS, null).getEncoded()
null değerini döndürür, bu da istisnai bir şekilde istisnalara yol açar.
Bunun çevrimiçi olduğunu, bunun KeyStore sisteminin amaçlanan davranışı olduğunu okudum.
Eğer gerçekten saklanan şifreleme anahtarının bayt dizisini alamıyorsam, anahtarımı kullanarak anahtarımı nasıl şifreleyeceğim?
Şifreleme anahtarını güvenli bir şekilde depolamak için başka bir yöntem var mı, böylece bunu benim arabirim yapılandırmasında kullanabilir miyim?
Herhangi bir çözüm buldunuz mu, ben de bu sorunla karşı karşıyayım – saikrupa