我正在使用 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);
}
有谁知道我做错了什么?
白衣非少年
相关分类