簡體   English   中英

如何在 Rust 中散列二進制文件

[英]How to hash a binary file in Rust

在 Rust 中,使用sha256 = "1.0.2" (或類似的),我如何散列二進制文件(即tar.gz存檔)?

我正在嘗試獲取該二進制文件的 sha256。

這不起作用:

fn hash() {
    let file = "file.tar.gz";
    let computed_hash = sha256::digest_file(std::path::Path::new(file)).unwrap();
    computed_hash
}

輸出是:

...
Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }

依賴的sha2 crate 支持散列Read對象,而無需將整個文件讀入內存。 請參閱哈希自述文件中的示例。

use sha2::{Sha256, Digest};
use std::{io, fs};

let mut hasher = Sha256::new();
let mut file = fs::File::open("file.tar.gz")?;

let bytes_written = io::copy(&mut file, &mut hasher)?;
let hash_bytes = hasher.finalize();

問題是digest_file在內部將文件讀取到String ,這要求它包含有效的UTF-8,在這種情況下這顯然不是您想要的。

相反,您可以將文件作為字節讀取並將其傳遞給sha256::digest_bytes

let bytes = std::fs::read(path).unwrap();  // Vec<u8>
let hash = sha256::digest_bytes(&bytes);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM