#hash #write #data #hashing #hasher #sha-256 #sha-2

write-hasher

在写入类型(异步)时透明地计算哈希。

1个不稳定版本

0.1.2 2023年5月24日
0.1.1 2023年4月27日
0.1.0 2023年4月27日

#2349 in 密码学

Download history 3/week @ 2024-03-08 1/week @ 2024-03-15 41/week @ 2024-03-29 4/week @ 2024-04-05 2/week @ 2024-04-19 27/week @ 2024-04-26 12/week @ 2024-05-24 14/week @ 2024-05-31 18/week @ 2024-06-14 29/week @ 2024-06-21

70 每月下载次数

MIT 许可证

18KB
360

WriteHasher

对写入到写入器的数据进行哈希处理。
支持 tokio::io::AsyncWrite, futures::io::AsyncWrite, std::io::Write.

示例

extern crate sha2;
use sha2::Sha256;
use write_hasher::WriteHasher;

let mut file = std::fs::File::open("Cargo.toml").unwrap();
let dest = std::io::sink();
let dest = WriteHasher::<Sha256, _>::new(dest);
std::io::copy(&mut file, &mut dest).unwrap();
let hash = dest.finalize();

您可以使用异步函数以及std函数来实现。


lib.rs:

将作为任何
std::io::Write /
futures::io::AsyncWrite /
tokio::io::AsyncWrite 对象

您可以将之前提到的任何trait对象包装在其中,这将透明地哈希写入其内的数据。

该对象应实现AsyncRead,以便它可以包装一些数据,然后透明地从该数据读取,同时将哈希工作卸载到另一个线程。

extern crate sha2;
use write_hasher::{WriteHasher, MinDigest};
let mut src = std::fs::File::open(".gitignore").unwrap();
let sink = std::io::sink();
let mut hasher = WriteHasher::<sha2::Sha256, _>::new(sink);
std::io::copy(&mut src, &mut hasher).unwrap();
let x = hasher.finalize();
let x = format!("{:x}", x);
assert_eq!(
    "c1e953ee360e77de57f7b02f1b7880bd6a3dc22d1a69e953c2ac2c52cc52d247",
    x
);

依赖关系

~0.3–1.8MB
~34K SLoC