【问题标题】:How to store hardcoded encryption master key in android?如何在android中存储硬编码的加密主密钥?
【发布时间】:2021-12-12 14:42:04
【问题描述】:

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

【问题讨论】:

  • This sample project 演示生成密码短语,然后将其存储在使用基于KeyStore 的加密密钥(通过androidx.security 及其EncryptedFile 类)加密的文件中。

标签: android encryption key android-room sqlcipher


【解决方案1】:

您可以使用此library 来使用 android 密钥库系统保护您的数据。 您可以在您的应用程序中生成密钥:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多