2016-08-23 32 views
9

Làm cách nào để nhận mã tương đương bên dưới khi tôi nhắm mục tiêu API 18? Mã bên dưới chỉ hoạt động cho API 23 trở lên. Mã API 18 sẽ an toàn đến mức nào, vì chúng tôi không thể sử dụng KeyGenParameterSpec và mã API 18 có thể sử dụng API không dùng nữa?Cách sử dụng API KeyStore của Android với API 18?

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(); 

Trả lời

5

Tạo và lưu trữ khóa đối xứng trong Android KeyStore được hỗ trợ từ Android 6.0 (API Level 23) trở đi.

Tạo và lưu trữ khóa bất đối xứng trong Android KeyStore được hỗ trợ từ Android 4.3 (API Cấp 18) trở đi.

Xem tài liệu này để biết thêm: Android Keystore System

Mặc dù có một số vấn đề bạn có thể sử dụng hệ trọng không đối xứng. Thực hiện theo các tài liệu tham khảo dưới đây ..

Asymmetric Key Generation

+0

Có cách nào bạn có thể tạo khóa đối xứng trước khi mức 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(); 
} 
Các vấn đề liên quan