如何从 Rust Ring Digest 获取摘要字符串格式结果

问题描述 投票:0回答:2

我正在使用 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);
}

还是没用。

rust hash ring
2个回答
0
投票

使用 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());

0
投票

我知道这篇文章已经有几年了,但我发现自己问了同样的问题,这是最热门的搜索结果。我找到了一种无需额外的板条箱即可显示结果的方法(当然,除了

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;
}

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.