Android 应用程序中解密所需的 IV 存储在哪里?

Where to store IV that is needed for decryption in Android app?

在我的 Android 应用程序中,我应该在哪里存储 AES 解密所需的 IV(字节数组)?我试过将它转换为 Base64 中的字符串并将其保存到共享首选项,但一直出现错误的填充异常。我尝试更改填充,但没有用。

我还将 IV(字节数组)保存到密钥库的提供程序并且工作正常,但是在 Visual Studio 中调试 Mac 时,提供程序的内容(在本例中为 IV)被删除每次我 运行 应用程序。提供者仍然存在,但提供者中没有保存任何内容。 Android 的文档说 "Each provider... is configured in each runtime it is installed in." 在实际设备上安装该应用程序后,这会成为问题吗?

我在 Visual Studio 中为 Mac 使用 C# 编码。

编辑

这是我使用 Base64 编码的代码:

字符串 ivString = Base64.EncodeToString(ivByteArray, Base64Flags.Default);

byte[] decodedIV = Base64.Decode(ivString, Base64Flags.Default);

当我打印出原始字节数组和解码后的字节数组时,它们完全相同,但我一直收到错误的填充异常

我正在使用 AES、CBC 和 EncryptionPaddingPkcs7

I've tried converting it to a string in Base64 and saving it to shared preferences, but kept getting a bad padding exception.

在 SharedPreferences 中存储 IV 应该可以。您可能遇到了 base64 编码问题。

I also saved the IV (byte array) to the keystore's provider and that worked, but while debugging in Visual Studio for Mac, the provider's content (in this case the IV) gets erased every time I run the app.

A java.security.Provider 这不是存放字节数组的地方。你是说Android Keystore System or other implementation of java.security.KeyStore。请具体

Where to store IV that is needed for decryption in Android app?

只需将初始化向量添加到密文中

 [IV][ciphertext]