使用7zip SDK散列解压缩和压缩的文件-c#

时间:2018-08-03 12:08:38

标签: c# sdk sha256 7zip lzma

我正在使用7z SDK压缩和解压缩文件。 我想在压缩文件之前先读取它,生成一个sha256哈希,在该文件上写入并压缩它。

解压缩时,我将读取哈希,将其存储在变量中,对文件进行解压缩,然后获取新的哈希以与存储在变量中的哈希进行比较以检查文件的完整性。

压缩文件时,我包括了以下代码段:

            //Write the hash size from the original file
            int HashCodeSize = Hash.generateSHA256Hash(input).Length;
            byte[] hashSize = BitConverter.GetBytes(HashCodeSize);
            output.Write(hashSize, 0, hashSize.Length);

            //Write the hash from the original file
            byte[] fileHashCode = new byte[8];
            fileHashCode = Hash.generateSHA256Hash(input);
            output.Write(fileHashCode, 0, fileHashCode.Length);

解压缩文件时,我这样做:

            //read the hash size from the original file
            byte[] hashSize = new byte[4];
            input.Read(hashSize, 0, 4);
            int sizeOfHash = BitConverter.ToInt16(hashSize, 0);

            //Read Hash
            byte[] fileHash = new byte[sizeOfHash];
            input.Read(fileHash, 0, 8);

当我包含这两个代码块时,我会从SDK中收到*未处理的异常, 没有它们,程序将无法正常运行。

这就是我生成哈希的方式:

public static byte[] generateSHA256Hash(Stream fileSource)
{
    SHA256 fileHashed = SHA256Managed.Create();
    return fileHashed.ComputeHash(fileSource);
}

有人知道我在做什么错吗?

unhandled execption

1 个答案:

答案 0 :(得分:0)

在写入文件之前将指针移动到文件的开头解决了我的问题:

 input.Seek(0, SeekOrigin.Begin);