【发布时间】:2017-03-11 22:08:39
【问题描述】:
我想从单个文件流中加密文件,但是当解密填充无效且无法删除时出现此错误,但如果我设置填充,加密和解密方法具有相同的填充。Zeros 不加密文件
private static readonly byte[] SALT = new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c };
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes("TestKey", SALT);
public bool EncryptFileP(string Path)
{
FileInfo IOF = new FileInfo(Path);
WRStream = new FileStream(Path, FileMode.Open);
CryptoStream cryptoStream;
Rijndael rijndael = Rijndael.Create();
rijndael.Key = pdb.GetBytes(16);
rijndael.IV = pdb.GetBytes(16);
rijndael.Mode = CipherMode.CBC;
rijndael.Padding = PaddingMode.PKCS7;
cryptoStream = new CryptoStream(WRStream, rijndael.CreateEncryptor(), CryptoStreamMode.Write);
cryptoStream.Close();
WRStream.Close();
return true;
}
public bool DecryptFileP(string Path)
{
FileInfo IOF = new FileInfo(Path);
WRStream = new FileStream(Path, FileMode.Open);
CryptoStream cryptoStream;
Rijndael rijndael = Rijndael.Create();
rijndael.Key = pdb.GetBytes(16);
rijndael.IV = pdb.GetBytes(16);
rijndael.Mode = CipherMode.CBC;
rijndael.Padding = PaddingMode.PKCS7;
cryptoStream = new CryptoStream(WRStream, rijndael.CreateDecryptor(), CryptoStreamMode.Write);
cryptoStream.Close(); //error! padding is invalid and cannot be removed
WRStream.Close();
return true;
}
【问题讨论】:
-
表示解密失败,至少有一个加密数据、IV、密钥或参数不正确或解密不正确。使用 PKCS#7 填充正确的东西使用。
-
如果任何给定的答案解决了您的问题,您可以accept 其中一个。如果没有,请详细说明问题所在。
标签: c# encryption padding