我正在构建一个使用Room的应用程序,想要使用SQLCipher加密数据库,需要一个主密钥来加密/解密数据库。我不想从用户那里获取主密钥,而是想使用一个主密钥并将其存储在设备上,但据我所知,硬编码密钥不安全。因此,我希望有一种方法可以安全地存储密钥在应用程序中,以便与SQLCipher一起使用。
我正在构建一个使用Room的应用程序,想要使用SQLCipher加密数据库,需要一个主密钥来加密/解密数据库。我不想从用户那里获取主密钥,而是想使用一个主密钥并将其存储在设备上,但据我所知,硬编码密钥不安全。因此,我希望有一种方法可以安全地存储密钥在应用程序中,以便与SQLCipher一起使用。
您可以使用该库来使用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);
androidx.security
和其EncryptedFile
类的KeyStore
加密密钥将其存储在一个文件中。 - CommonsWare