如何从 Rust 的 MD-5 (MD5) 箱中获取十六进制字符串?

Gat*_*ito 2 md5 cryptography rust

根据这个关于WWW身份验证的RFC(在HTTPTTP中使用)https://www.rfc-editor.org/rfc/rfc2617#page-7

就本文档而言,128 位的 MD5 摘要
表示为 32 个 ASCII 可打印字符。128 位摘要中的位从最高有效位转换为最低有效位,
每次四位,转换为 ASCII 表示形式,如下所示。每四位由字符 0123456789abcdef 中熟悉的十六进制表示法表示
。也就是说,二进制 0000 由字符“0”表示,0001 由“1”表示,依此类推,直到
1111 由“f”表示。

Rust 的MD5 箱实现了 Digest 特征:https://docs.rs/digest/0.9.0/digest/trait.Digest.html8 ,它摘要为由16 位切片组成的 GenericArray 。

如何从 RFC 转换为这种哈希格式?为什么 md-5 crate 没有一个将摘要显示为十六进制值的简单功能?

该板条箱literal_hex执行相反的操作:将十六进制连接值的字符串转换为字节。

Mas*_*inn 7

如何从 RFC 转换为这种哈希格式?

使用(LowerHex) 格式说明符对其x进行格式化:

fn main() {
    let s = md5::Md5::new();
    println!("{:x}", s.finalize());
    // d41d8cd98f00b204e9800998ecf8427e
    println!("{:x}", md5::Md5::digest(b""));
    // d41d8cd98f00b204e9800998ecf8427e
}
Run Code Online (Sandbox Code Playgroud)

所示的示例digest::Digest::digest

为什么 md-5 crate 没有一个将摘要显示为十六进制值的简单功能?

因为这是 Rust 内置的。