当应用程序未在Microsoft商店发布时,此代码运行良好。 但发布后出现“填充无效且无法删除”的错误。 所有密钥和盐IV都被检查并且相同。 有什么不对,请帮忙。 或者build议其他代码。 这是手机8.1和Windows Mobile 10.0应用程序。 源文件在SD卡中,目标位于应用程序的本地文件夹中。
int Iterations = 1000; AesManaged aes = new AesManaged(); aes.BlockSize = aes.LegalBlockSizes[0].MaxSize; aes.KeySize = aes.LegalKeySizes[0].MaxSize; byte[] salt = GetBytes(SaltKey); Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(SKey, salt, Iterations); aes.Key = key.GetBytes(aes.KeySize / 8); aes.IV = key.GetBytes(aes.BlockSize / 8); ICryptoTransform transform = aes.CreateDecryptor(aes.Key, aes.IV); try { using (FileStream dest = new FileStream(destFilename, FileMode.CreateNew, FileAccess.Write, FileShare.None)) { using (CryptoStream cryptoStream = new CryptoStream(dest, transform, CryptoStreamMode.Write)) { using (FileStream source = new FileStream(srcFilename, FileMode.Open, FileAccess.Read, FileShare.Read)) { source.CopyTo(cryptoStream); } } } } catch (Exception exception) { //return "Decryption failed : " + exception.Message.ToString(); System.Diagnostics.Debug.WriteLine("Decryption failed : " + exception.Message.ToString()); //throw new ApplicationException("Decryption failed.", exception); MessageBox.Show("Decryption failed : " + exception.Message.ToString()); }
问题是从SD卡访问src文件。 访问被拒绝,失败的文件流得到任何数据解密。 因此,它解密空数据,并给填充错误。 我明白了,因为我试图通过文件流复制拷贝文件然后解密。 复制文件失败,并给予拒绝访问错误。 任何人都可以帮助为什么访问SD卡中的文件的路径失败。 该错误是https://www.microsoft.com/getsilverlight/DllResourceIDs/Default.aspx?Version=4.0.30508.0&File=mscorlib.dll&Key=UnauthorizedAccess_IODenied_Path 。 应用程序在发布之前访问SD卡文件。 包括所有权限。