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

时间:2018-03-20 20:57:17

标签: c# android aes keystore initialization-vector

我应该在Android应用中存储AES解密所需的IV(字节数组)?我已经尝试将其转换为Base64中的字符串并将其保存到共享首选项,但仍然遇到错误的填充异常。我试图改变填充,但它没有用。

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

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

修改

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

string ivString = Base64.EncodeToString(ivByteArray,Base64Flags.Default);

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

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

我正在使用AES,CBC和EncryptionPaddingPkcs7

1 个答案:

答案 0 :(得分:1)

  

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

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

  

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

java.security.Provider它不是存储bytearray的地方。您的意思是Android Keystore System还是java.security.KeyStore的其他实现。请具体说明

  

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

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

 [IV][ciphertext]