如何在android中存储硬编码的加密主密钥?
Posted
技术标签:
【中文标题】如何在android中存储硬编码的加密主密钥?【英文标题】:How to store hardcoded encryption master key in android? 【发布时间】:2021-12-12 14:42:04 【问题描述】:我正在构建一个使用 Room 的应用程序,我想使用 SQLCipher 加密数据库,这需要一个主密钥来加密/解密数据库。我不想从用户那里获取主密钥,我想使用 1 个主密钥并将其存储在设备上,但据我所知,对密钥进行硬编码并不安全。所以我想要一种方法将密钥安全地存储在应用程序上,以便与 SQLCipher 一起使用。
【问题讨论】:
This sample project 演示生成密码短语,然后将其存储在使用基于KeyStore
的加密密钥(通过androidx.security
及其EncryptedFile
类)加密的文件中。
【参考方案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);
【讨论】:
以上是关于如何在android中存储硬编码的加密主密钥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在android studio中伪装或加密gmail发件人的硬编码密码