In the RijndaelManaged object, set the Padding property to PaddingMode.ANSIX923 or PaddingMode.ISO10126 .
These null bytes were added to fill the final encrypted block. By default, it was filled with zeros, which means that the actual data length is not indicated. Other padding modes include length in the last byte, so indentation can be removed after decryption.
Set the padding property in both the encrypted and decrypted routine with the same value.
rijndaelCSP.Padding = PaddingMode.ANSIX923;
If he knows what to expect, then the decryption stream will automatically delete the filling, so no further changes will be required.
UPDATE
Looking at your code, it seems that the number of bytes you write to the output file is equal to the number of bytes read from the input file.
byte[] inputFileData = new byte[(int)inputFileStream.Length]; decryptStream.Read(inputFileData, 0, (int)inputFileStream.Length);
The decryption process will not completely fill the inputFileData array due to the input filling.
Then the output stream writes out the entire length of the buffer, although it was not completely full.
outputFileStream.Write(inputFileData, 0, inputFileData.Length);
This is the source of your zeros.
You might want to change the encryption and decryption method so that it no longer uses fixed-length buffers. In addition, you can save the length of the encrypted data at the beginning and record the number of bytes corresponding to this length.