我的应用有一个数据库,我需要一个密码来加密它。
如果我将硬编码密码存储在java或JNI中,则很容易入侵。
使用AndroidKeyStore生成密码更安全吗? (当密码更改时,我将重新创建复制的数据库。)因此黑客无法轻易获取密码。
这是我的代码。我使用KayPair的公钥作为密码:
private String generateAcStr() {
String keyAlias = "DBAlias";
KeyStore keystore = null;
try {
keystore = KeyStore.getInstance(ANDROID_KEY_STORE);
keystore.load(null);
if(!keystore.containsAlias(keyAlias)) {
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA", ANDROID_KEY_STORE);
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
end.add(Calendar.MONTH, 1);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(this)
.setAlias(keyAlias)
.setSubject(new X500Principal("CN=Custer Name, O=Android Authority"))
.setSerialNumber(BigInteger.ONE)
.setStartDate(start.getTime())
.setEndDate(end.getTime())
.setKeySize(1024)
.build();
generator.initialize(spec);
generator.generateKeyPair();
}
KeyStore.PrivateKeyEntry privateKeyEntry = (PrivateKeyEntry) keystore.getEntry(keyAlias, null);
// use the public key to be the password
return Base64.encodeToString(privateKeyEntry.getCertificate().getPublicKey().getEncoded(), Base64.DEFAULT);
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
} catch (UnrecoverableEntryException e) {
e.printStackTrace();
}
return null;
}
感谢您的帮助。