2 个稳定版本
2.0.0 | 2024 年 3 月 13 日 |
---|---|
1.0.0 | 2024 年 2 月 17 日 |
#2057 在 算法 中
31KB
538 行
yet-another-md5
这是一个能够从 MD5 哈希算法读取数据的 std::io::Read 实现的能力。
为什么?
此项目的最主要动机是作为一个学习 Rust 的练习。
第二个原因是,我找到的 Rust 的 MD5 实现,对二进制字符串进行哈希处理,这迫使你必须将整个要哈希的数据加载到内存中;考虑到 MD5 算法是分块处理数据的,我觉得这看起来很荒谬。
用法
use std::fs::File;
use std::io::prelude::*;
use ya_md5::Md5Hasher;
use ya_md5::Hash;
use ya_md5::Md5Error;
fn main() -> Result<(), Md5Error> {
let mut file = File::open("foo.txt")?;
Md5Hasher::hash(&mut file)?
let result = format!("{}", hash);
assert_eq!(result, "5eb63bbbe01eeed093cb22bb8f5acdc3");
Ok(())
}
参见 文档。
lib.rs
:
这是一个能够从 MD5 哈希算法读取数据的 std::io::Read 实现的能力。
示例
use std::fs::File;
use std::io::prelude::*;
use ya_md5::Md5Hasher;
use ya_md5::Hash;
use ya_md5::Md5Error;
fn example() -> Result<(), Md5Error> {
std::fs::write("foo.txt", b"hello world")?;
let hash = {
let mut file = File::open("foo.txt")?;
Md5Hasher::hash(&mut file)?
};
std::fs::remove_file("foo.txt")?;
let result = format!("{}", hash);
assert_eq!(result, "5eb63bbbe01eeed093cb22bb8f5acdc3");
Ok(())
}
依赖项
~0.3–0.8MB
~19K SLoC