当应用程序未在Microsoft商店发布时,此代码运行良好。但是在发布后给出“填充无效且无法删除”错误。 检查所有的密钥和盐IV并且是相同的。有什么不对请帮忙。或者建议其他代码。它是手机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());
}
答案 0 :(得分:0)
问题在于从SD卡访问srcfile。访问被拒绝,文件流失败,无法解密任何数据。因此,它解密空数据并给出填充错误。我明白了,因为我尝试通过文件流复制复制文件然后解密。复制文件失败并提供访问被拒绝错误。任何人都可以帮助解决为什么访问SD卡中的文件路径失败。错误是https://www.microsoft.com/getsilverlight/DllResourceIDs/Default.aspx?Version=4.0.30508.0&File=mscorlib.dll&Key=UnauthorizedAccess_IODenied_Path。 该应用程序在发布之前访问SD卡文件。包含所有权限。