Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Android应用程序中,在哪里存储解密所需的IV?_C#_Android_Aes_Keystore_Initialization Vector - Fatal编程技术网

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

C# 在Android应用程序中,在哪里存储解密所需的IV?,c#,android,aes,keystore,initialization-vector,C#,Android,Aes,Keystore,Initialization Vector,我应该将AES解密所需的IV(字节数组)存储在我的Android应用程序的何处?我尝试将其转换为Base64中的字符串,并将其保存到共享首选项,但不断出现错误的填充异常。我试着换衬垫,但没用 我还将IV(字节数组)保存到密钥库的提供程序中,这也起到了作用,但在Visual Studio for Mac中调试时,每次运行应用程序时,提供程序的内容(在本例中为IV)都会被擦除。提供程序仍然存在,但未在提供程序中保存任何内容。Android的文档中说,“每个提供商……都是在其安装的每个运行时配置的。”

我应该将AES解密所需的IV(字节数组)存储在我的Android应用程序的何处?我尝试将其转换为Base64中的字符串,并将其保存到共享首选项,但不断出现错误的填充异常。我试着换衬垫,但没用

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

我正在Visual Studio for Mac中用c#编写代码

编辑

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

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

字节[]decodedIV=Base64.Decode(ivString,Base64Flags.Default)

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

我正在使用AES、CBC和EncryptionPaddingPkcs7

我尝试将其转换为Base64中的字符串,并将其保存到共享首选项,但不断出现错误的填充异常

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

我还将IV(字节数组)保存到密钥库的提供程序中,这也起到了作用,但在Visual Studio for Mac中调试时,每次运行应用程序时,提供程序的内容(在本例中为IV)都会被擦除

java.security.Provider
它不是存储bytearray的地方。你的意思是或其他的执行。请具体说明

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

只需在密文前面加上初始化向量

 [IV][ciphertext]

我使用了
SharedReferences
Base64
编码中存储
IV
,它工作正常。你可能在某个地方出错了。即使不是在c#中,在Java中。将IV存储在“某处”只会使事情变得更复杂,只需将其预先添加到加密文本中,它不需要保密。存储IV的代码似乎不是问题。显示加密和解密代码以及如何存储AESkey@HarminderKaur回答说:“只需在密文前面加上初始化向量,”IV不需要是机密的,只需是唯一的,如随机值。@HarminderKaur,如果您是不安全的加密密码。不要加密密码,当攻击者获得DB时,他也将获得加密密钥。另外,仅仅使用散列函数是不够的,仅仅添加一个salt对提高安全性几乎没有作用。使用诸如
PBKDF2
Rfc2898DeriveBytes
Argon2
password\u hash
Bcrypt
之类的函数,或者使用大约100ms CPU时间的类似函数。重点是让攻击者花费大量时间通过暴力手段查找密码。