我应该在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
答案 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]