2016-08-23 136 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 6.0(API Level 23)开始支持Android KeyStore中的对称密钥生成和存储。

从Android 4.3(API Level 18)开始支持Android KeyStore中的非对称密钥生成和存储。

更多信息请参阅本文档: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(); 
} 
相关问题