我正在使用 Rust Ring(
ring = "0.16.20"
) 来获取消息摘要,这是我的代码:
use ring::{digest, test};
fn main() {
let actual = digest::digest(&digest::SHA512, b"hello, world");
let result = format!("{:x}", actual);
}
但它给了我一些提示:
`Digest` doesn't implement `LowerHex` (required by {:x})
我应该怎么做才能从环
Digest
结果中获取摘要字符串?我也试图找到一个to_string()
的方法但失败了。我也尝试过这个方法:
fn main() {
let actual = digest::digest(&digest::SHA512, b"hello, world");
let s = match str::from_utf8(actual.as_ref()) {
Ok(v) => v,
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
};
println!("result: {}", s);
//let result = format!("{:x}", actual);
}
还是没用。
使用 data_encoding(
data-encoding = "2.3.2"
) lib 获取字符串结果:
let actual = digest::digest(&digest::SHA512, b"hello, world");
let calc_digest_str = HEXLOWER.encode(actual.as_ref());
我知道这篇文章已经有几年了,但我发现自己问了同样的问题,这是最热门的搜索结果。我找到了一种无需额外的板条箱即可显示结果的方法(当然,除了
ring
之外),通过易于重用的特征创建自己的函数并使用 Rust 自己的 format!
宏:
impl DisplayChecksum for ring::digest::Digest {
fn checksum(&self) -> String {
let mut hash = String::new();
for h in self.as_ref() {
let hex = format!("{:x}", h);
if hex.len() == 1 {
hash.push_str(format!("0{}", hex).as_str());
} else {
hash.push_str(format!("{:x}", h).as_str());
}
}
hash
}
}
pub trait DisplayChecksum {
fn checksum(&self) -> String;
}