我有一个非常大的文件,我需要计算 Go 中的校验和(30 到 200GB 之间)。我使用通用sha256sum程序来获取数据的规范散列,但是在 Go 中尝试做同样的事情时,我无法获得相同的散列。我最初是从这个功能开始的,它确实按预期工作:func checksum(file string) (string, error) { f, err := os.Open(file) if err != nil { return "", err } defer func() { _ = f.Close() }() copyBuf := make([]byte, 1024 * 1024) h := sha256.New() if _, err := io.CopyBuffer(h, f, copyBuf); err != nil { return "", err } return hex.EncodeToString(h.Sum(nil)), nil}但是,需求发生了变化,我需要在读取缓冲区时对其进行一些处理,因此我将代码修改为类似的内容。但是,现在哈希不正确,我不确定我做错了什么。 f, err := os.Open("<large file>") if err != nil { panic(err) } defer func() { _ = f.Close() }() buf := make([]byte, 1024 * 1024) h := sha256.New() for { bytesRead, err := f.Read(buf) if err != nil { if err != io.EOF { panic(err) } fmt.Println("EOF") break } // do some other work with buf before adding it to the hasher // processBuffer(buf) fmt.Printf("bytes read: %d\n", bytesRead) h.Write(buf) } fmt.Printf("checksum: %s\n", hex.EncodeToString(h.Sum(nil)))有人知道我做错了什么吗?
- 1 回答
- 0 关注
- 277 浏览
添加回答
举报
0/150
提交
取消