하나의 파일 스트림에서 파일을 암호화하고 싶지만 암호 해독 패딩이 잘못되어 제거 할 수없는 경우이 오류가 발생합니다. 패딩을 설정하면 암호화 및 암호 해독 방법에 동일한 패딩이 적용됩니다. 이 상태이기 때문에 제로는, 파일C# Rijandel 파일 암호 해독 패딩이 잘못되어 제거 할 수 없습니다.
당신은 암호화 및 암호 해독에 대해 개별적으로Rfc2898DeriveBytes
를 인스턴스화해야
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을 사용하여 올바른 것을 채 웁니다. – zaph
주어진 답 중 하나라도 문제가 해결되면 (http://meta.stackexchange.com/q/5234/266187) 그 중 하나를 수락 할 수 있습니다. 그렇지 않다면, 무엇이 잘못되었는지 확장하십시오. –