У меня есть большой файл (исходный файл (при условии 10 ГБ)), который мне нужно прочитать его кусками, сжать и получить sh. (Наконец, у нас есть два вывода: ha sh файла в строковом формате (md5HashHex) и сжатый файл в байтовом формате (destData).) Также перед сжатием мне нужно добавить заголовок к месту назначения (destData) и ха sh это. После этого нужно открыть исходный файл и прочитать его по чанку, сжать и ха sh каждый чанк. Я обнаружил, что мое хэширование будет отличаться, когда я читаю фрагмент файла с помощью фрагмента, сравнивая его с ha sh в одном go. Вот мой код, я ценю, если вы можете помочь мне с этим. Также я хотел бы знать, правильно ли я делаю сжатие. Спасибо.
public static void CompresingHashing(string inputFile)
{
MD5 md5 = MD5.Create();
int byteCount = 0;
var length = 8192;
var chunk = new byte[length];
byte[] destData;
byte[] compressedData;
byte[] header;
header = Encoding.ASCII.GetBytes("HEADER");
md5.TransformBlock(header, 0, header.Length, null, 0);
destData = AppendingArrays(destData, header); //destination
using (FileStream sourceFile = File.OpenRead(inputFile))
{
while ((byteCount = sourceFile.Read(chunk, 0, length)) > 0)
{
using (var ms = new MemoryStream())
{
using (ZlibStream result = new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.Default)
result.Write(chunk, 0, chunk.Length);
}
compressedData = ms.ToArray();
md5.TransformBlock(compressedData, 0, compressedData.Length, null, 0);
destData = AppendingArrays(destData, compressedData);
}
md5.TransformFinalBlock(chunk, 0, 0);
byte[] md5Hash = md5.Hash;
string md5HashHex = string.Join(string.Empty, md5Hash.Select(b => b.ToString("x2")));
}
Console.WriteLine("Hash : " + hash);
}
public static byte[] AppendingArrays(byte[] existingArray, byte[] ArrayToAdd)
{
byte[] newArray = new byte[existingArray.Length + ArrayToAdd.Length];
existingArray.CopyTo(newArray, 0);
ArrayToAdd.CopyTo(newArray, existingArray.Length);
return newArray;
}
Но если у меня есть sh destData (который является исходным файлом + заголовок), я получил другой результат: (ради места, я не повторял код)
.
.
.
destData = AppendingArrays(destData, compressedData);
byte[] md5Hash = md5.ComputeHash(data);
.
.
.