如何在安卓系统中存储硬编码加密主密钥?

3

我正在构建一个使用Room的应用程序,想要使用SQLCipher加密数据库,需要一个主密钥来加密/解密数据库。我不想从用户那里获取主密钥,而是想使用一个主密钥并将其存储在设备上,但据我所知,硬编码密钥不安全。因此,我希望有一种方法可以安全地存储密钥在应用程序中,以便与SQLCipher一起使用。


这个示例项目演示了如何生成一个口令短语,然后使用基于androidx.security和其EncryptedFile类的KeyStore加密密钥将其存储在一个文件中。 - CommonsWare
1个回答

0

您可以使用该来使用Android Keystore系统保护您的数据。 您可以在您的应用程序中生成密钥,如下所示:

String keyAlias = BuildConfig.APPLICATION_ID;
// Create and save key
Store store = new Store(FieldForceApplication.getContext());
if (!store.hasKey(keyAlias)) {
    SecretKey key = store.generateSymmetricKey(keyAlias, null);
}

然后使用keyAlias(在我的情况下是applicationId)获取密钥,您可以设置任何字符串。

SecretKey key = store.getSymmetricKey(keyAlias, null);

获取密钥后,您可以进行加密或解密数据,如下所示:

Crypto crypto = new Crypto(Options.TRANSFORMATION_SYMMETRIC);
String encryptedData = crypto.encrypt(rawText, key);

String decryptedData = crypto.decrypt(rawText, key);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接