Я пытаюсь вычислить и сравнить хэши частей торрент-файла и столкнулся с проблемой, когда на основе моих файлов я получаю больше хэшей, чем в торрент-файле, создаваемом торрент-приложениями.
У меня есть функция хеширования длявычислять хэши частей файла и каждый файл проходит через него
public static async Task<IEnumerable<byte[]>> CreateHashTableAsync(HashAlgorithm provider,
Stream inputStream,
int blockSize,
IBufferManager bufferManager,
CancellationToken ct)
{
if (provider == null)
throw new ArgumentNullException(nameof(provider));
if (inputStream == null)
throw new ArgumentNullException(nameof(inputStream));
if (bufferManager == null)
throw new ArgumentNullException(nameof(bufferManager));
var HASH_TABLE = new List<byte[]>();
var BUFFER = bufferManager.TakeBuffer(blockSize);
int CALL_READ = 0;
while ((CALL_READ = await inputStream.ReadAsync(BUFFER, 0, blockSize, ct).ConfigureAwait(false)) > 0)
{
ct.ThrowIfCancellationRequested();
var BLOCK_HASH = provider.ComputeHash(BUFFER, 0, CALL_READ);
HASH_TABLE.Add(BLOCK_HASH);
}
BUFFER = null;
return HASH_TABLE;
}
Как я уже сказал, проблема в том, что в конце хеширования всех файлов у меня немного больше частей, чем в торрент-файле.Должен ли я обращаться с хешированием по-другому?Я понимаю, что в конце файла общепринято, что оставшиеся в файле данные меньше размера куска, но не уверен, как следует обращаться с этой ситуацией.