私のアプリケーションに暗号化されたデフォルト領域のインスタンスを設定しようとしています。 アイデアはKeyPairGeneratorを使用して特定のエイリアスを使用して鍵を生成し、のAndroidKeyStoreに格納し、必要なときにその鍵を使用することです。KeyStoreにキーが格納された領域を暗号化する
私は何をすべきか
これは私が鍵を生成する方法である:
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();
}
私はAPIバージョン18とをサポートする必要があるとして、私はするKeyPairGeneratorを使用しています。
KSはそうのように取得キーストアのインスタンスであるRealmConfiguration config = null;
try {
config = new RealmConfiguration
.Builder(this)
.encryptionKey(ks.getKey(KEY_ALIAS, null).getEncoded())
.name("dealmatrix.realm")
.schemaVersion(1)
.build();
:
Keystore ks = KeyStore.getInstance("AndroidKeyStore");
ks.load(null);
WRONG
をGOES WHATここ
は、私のアプリケーションでどのように私のセットアップ私のデフォルトのレルムのインスタンスをあります私の問題は、この式は次のとおりです。
ks.getKey(KEY_ALIAS, null).getEncoded()
はnullを返します。これは明らかに例外につながります。
私はこれがKeyStoreシステムの意図された動作であることをオンラインで読んでいます。
実際に私は格納された暗号化キーのバイト配列を取得できない場合、どのように私の領域を暗号化すると思いますか?
暗号化キーを安全に保存して、自分のレルム構成で使用する方法はありますか?
あなたは解決策を見つけましたか、この問題に直面しています – saikrupa