如何 encrypt/decrypt 使用 Android KeyStore 并保持兼容性?

How to encrypt/decrypt using the Android KeyStore with keeping compatibility?

我正在开发一个 Android 应用程序。

为了安全起见,我应该encrypt/decrypt私有数据。

直到现在,我只是将它们作为纯文本存储到 SharedPreference 中。

因为网上有很多示例代码,所以应用AndroidKeyStore并不难。

现在我有 "encrypt"、"decrypt" 个方法。

问题是...

许多用户的数据已经作为纯文本存储在 SharedPreference 中。

因为我的应用程序会尝试解密纯文本,如果我更新此应用程序,他们将面临崩溃或错误行为。

然后...

如何保持兼容性?

实际上,当我更新我的应用程序时,我遇到了 IllegalBlockSizeException。

所以我认为如果我在 "decrypt" 方法上捕获 IllegalBlockSizeException 并且 return 只是纯文本,我的应用程序将正常运行。

但是不知道对不对...

你能告诉我一些建议吗?

  1. 你的新版本增加版本对吗?为什么不在您的代码中添加一个 if else 逻辑,以根据您的应用程序版本决定是否 en/decrypt?
  2. 您可以创建新的 storage path/SharedPreference name 并实施您的 en/decrypt 逻辑。然后您的旧 SharedPreference 数据将被忽略。了解您的业务逻辑的风险。