[英]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.