Webサービス(自分で作成)から、base64文字列でエンコードされたRSAPrivateKey PKCS#8を受け取ります。私のAndroidアプリは、このキーを電話のどこかに安全に保存する必要があります。
Androidの4.3バージョンから、新しいKeyStoreAPIを使用してキーを保存することが可能です。キーを格納するために必要な仕様でKeyPairを生成する方法を示す コードaxampleの記事 を見つけました。そして、キーを回復した後。
// generate a key pair
Context ctx = getContext();
Calendar notBefore = Calendar.getInstance()
Calendar notAfter = Calendar.getInstance();
notAfter.add(1, Calendar.YEAR);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(ctx)
.setAlias("key1")
.setSubject(
new X500Principal(String.format("CN=%s, OU=%s", alais,
ctx.getPackageName())))
.setSerialNumber(BigInteger.ONE).setStartDate(notBefore.getTime())
.setEndDate(notAfter.getTime()).build();
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
kpGenerator.initialize(spec);
KeyPair kp = kpGenerator.generateKeyPair();
// in another part of the app, access the keys
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry)keyStore.getEntry("key1", null);
RSAPublicKey pubKey = (RSAPublicKey)keyEntry.getCertificate().getPublicKey();
RSAPrivateKey privKey = (RSAPrivateKey) keyEntry.getPrivateKey();
しかし、既存のキーを保存する方法がわかりません。誰か助けてもらえますか?前もって感謝します
KeyStore
には、秘密鍵を証明書(偽の自己署名証明書であっても)と一緒に保存する必要があります。キーをAndroidKeyStore
に保存するには、次の手順に従う必要があります。
PrivateKey
インスタンスを取得しますこれで、キーをキーストアに追加できます。
PrivateKey myKey = getKey();
X509Certificate certificate = getCertificate();
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
keystore.setKeyEntry("anAlias", myKey, null, new Certificate[] { certificate });