#md5 #hash #hashing #data #io-read #compute #algorithm

yet-another-md5

一个用于从 Read 对象计算 md5 哈希的库

2 个稳定版本

2.0.0 2024 年 3 月 13 日
1.0.0 2024 年 2 月 17 日

#2057算法

MIT 许可证

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