1个不稳定版本
0.1.2 | 2023年5月24日 |
---|---|
0.1.1 |
|
0.1.0 |
|
#2349 in 密码学
70 每月下载次数
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