Когда вы указываете 100 для вашего звонка на fIn.Read(...)
, вы говорите «Чтение до 100 байт» - обратите внимание, что фактическое количество байт может быть другим;Вы должны использовать возвращаемое значение, чтобы определить, сколько фактически было прочитано.
И при вызове fOut.Write
вы предполагаете, что вывод cc.Crypt(bin,key,iv,true)
будет ровно 100 байтов, что недопустимопредположение.Также обратите внимание, что вы всегда шифруете все 100 байтов bin
, даже если вы читаете только 1 из вашего файла.Если вы прочитали меньше 100, вы бы зашифровали все, что было «оставлено» в корзине (вероятно, 0 с, если не использовались ранее).
Исправьте эти проблемы длины, и вы должны быть на правильном пути.Что-то вроде:
while (rdlen < totlen)
{
len = fIn.Read(bin, 0, 100);
// note that we are encrypting all of "bin" here, may want to only
// encrypt "len" bytes..
byte[] encrypted = cc.Crypt(bin, key, iv, true);
fOut.Write(encrypted, 0, encrypted.Length);
rdlen = rdlen + len;
}