如何检查 sha256 哈希值?

How can I check a sha256 hash?

从所有可打印字符开始,我想一个一个地获取 sha256 字符,并将它们与从输入中获取的 sha256 进行比较。

我的代码是:

use hex_literal::hex;
use sha2::{Digest, Sha256};
use std::io;


fn main() {
    let printable = vec![b" ", b"!", b"#"];
    enter code here
    let mut hash_target = String::new();

    io::stdin()
        .read_line(&mut hash_target)
        .expect("Something Wrong!").to_owned();
    
    let hash_target = &hash_target[..];
    
    for i in 0..printable.len() {
        let mut sha256 = Sha256::new();

        sha256.update(printable[i]);

        let result = sha256.finalize();
        if result[..]
            == hex!(hash_target)[..]
        {
            println!("True");
        }
    }
}

我不知道如何将从输入读取的 sha 值赋给 hex 函数。

the documentation of the hex_literal crate所述, hex_literal::hex! 宏用于十六进制 文字 ,因此不适用于 runtime-generated 字符串作为输入。

要将十六进制字符串转换为 u8 切片,您可能需要像这样使用 the hex crate

let target = hex::decode(hash_target).expect("Failed to decode hex string");

根据原始代码改编的完整示例,并进行了一些小修复:

use sha2::{Digest, Sha256};
use std::io;

fn main() {
    let printables = vec![b" ", b"!", b"#"];
    let mut input = String::new();

    io::stdin()
        .read_line(&mut input)
        .expect("Failed to read input");
    let input_hash = hex::decode(input.trim()).expect("Failed to decode");

    for printable in printables.iter() {
        let mut sha256 = Sha256::new();
        sha256.update(printable);
        let expected_hash = sha256.finalize();

        if &expected_hash[..] == &input_hash[..] {
            println!("True");
        }
    }
}