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

我正在使用 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);

}

有谁知道我做错了什么?

http://img1.mukewang.com/6190b35500019a3309240805.jpg

千巷猫影
浏览 439回答 1
1回答

白衣非少年

在写入文件之前将指针移动到文件的开头解决了我的问题: input.Seek(0, SeekOrigin.Begin);
打开App,查看更多内容
随时随地看视频慕课网APP