1

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

我还将 IV(字节数组)保存到了密钥库的提供程序,并且工作正常,但是在 Visual Studio for Mac 中进行调试时,每次运行应用程序时,提供程序的内容(在本例中为 IV)都会被删除。提供者仍然存在,但提供者中没有保存任何内容。Android 的文档说“每个提供程序……都在它安装的每个运行时中进行配置。” 一旦应用程序安装在实际设备上,这会是一个问题吗?

我在 Visual Studio for Mac 中用 c# 编码。

编辑

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

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

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

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

我正在使用 AES、CBC 和 EncryptionPaddingPkcs7

4

1 回答 1

1

我尝试将其转换为 Base64 中的字符串并将其保存到共享首选项,但一直收到错误的填充异常。

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

我还将 IV(字节数组)保存到了密钥库的提供程序,并且工作正常,但是在 Visual Studio for Mac 中进行调试时,每次运行应用程序时,提供程序的内容(在本例中为 IV)都会被删除。

Ajava.security.Provider它不是存储字节数组的地方。您是指Android Keystore System还是java.security.KeyStore的其他实现。请具体

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

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

 [IV][ciphertext]
于 2018-03-20T21:24:46.587 回答