使用AndroidKeyStore生成数据库密码是否安全?

时间:2017-04-25 02:14:41

标签: android security

我的应用有一个数据库,我需要一个密码来加密它。

如果我将硬编码密码存储在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;

}

感谢您的帮助。

0 个答案:

没有答案