2016-08-23 9 views
9

API 18をターゲティングしているときに、以下の同等のコードを取得するにはどうすればよいですか?以下のコードはAPI 23以上でのみ動作します。また、KeyGenParameterSpecを使用できず、API 18コードで廃止予定のAPIが使用される可能性があることから、API 18コードはどれほど安全ですか?API 18でAndroid KeyStore APIを使用するにはどうすればよいですか?

KeyGenerator keyGenerator = KeyGenerator.getInstance(
    KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore"); 

keyGenerator.init(new KeyGenParameterSpec.Builder(alias, 
    KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT) 
    .setBlockModes(KeyProperties.BLOCK_MODE_CBC) 
    .setKeySize(256) 
    .setUserAuthenticationRequired(true) 
    .setUserAuthenticationValidityDurationSeconds(400) 
    .setRandomizedEncryptionRequired(false) 
    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7) 
    .build()); 

SecretKey key = keyGenerator.generateKey(); 

答えて

5

Android KeyStoreの対称鍵の生成と保存は、Android 6.0(APIレベル23)以降でサポートされています。

Android KeyStoreの非対称キーの生成と格納は、Android 4.3(APIレベル18)以降でサポートされています。あなたが非対称キー生成を使用することができますいくつかの問題がありますがAndroid Keystore System

は、詳細は、このドキュメントを参照してください。 ..

Asymmetric Key Generation

+0

怒鳴る参照はあなたが前にAPIレベル23に対称鍵を生成することができますどのような方法がありますフォロー? – Arst

0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
    KeyPairGenerator generator = KeyPairGenerator.getInstance(KEY_ALGORITHM_RSA, AndroidKeyStore); 
    generator.initialize(new KeyGenParameterSpec.Builder(
     Constants.SADAD_ENCRYPTION_ALIAS, 
     KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY) 
     .setDigests(
      KeyProperties.DIGEST_SHA256, 
      KeyProperties.DIGEST_SHA512) 
     .build() 
    ); 
    generator.generateKeyPair(); 
} else { 
    Calendar start = Calendar.getInstance(); 
    Calendar end = Calendar.getInstance(); 
    end.add(Calendar.YEAR, 1); 
    KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec 
     .Builder(SadadApplication.getInstance().getApplicationContext()) 
     .setAlias(Constants.SADAD_ENCRYPTION_ALIAS) 
     .setSubject(new X500Principal("CN=Your Company ," + 
      " O=Your Organization" + 
      " C=Your Coountry")) 
     .setSerialNumber(BigInteger.ONE) 
     .setStartDate(start.getTime()) 
     .setEndDate(end.getTime()) 
     .build(); 
    KeyPairGenerator generator = KeyPairGenerator.getInstance(KEY_ALGORITHM_RSA, AndroidKeyStore); 

    generator.initialize(spec); 
    generator.generateKeyPair(); 
} 
関連する問題