我想将哈希函数的输出打印到标准输出。我使用 groestl 哈希函数,但我认为它的工作原理与 sha 或其他函数相同。这样做会按预期打印哈希值:
fn create_hash<D: Digest>(msg: &str, mut hasher: D) -> GenericArray<u8, D::OutputSize> {
hasher.update(msg);
hasher.finalize()
}
fn main() {
let hasher = Groestl256::default();
let res = create_hash("asdfasdf", hasher);
println!("{:x}", res);
}
Run Code Online (Sandbox Code Playgroud)
输出:db102d374ae45b130ae49e91dcc7b648b86ba1a0415a32dcce7806d46f316460
现在我想做一个匹配以使其他算法(Groestl512,...)也可用。
let dig = match algorithm {
HashTypes::groestl224 => {
create_hash(message.as_ref().unwrap(), Groestl224::default())
}
HashTypes::groestl256 => {
create_hash(message.as_ref().unwrap(), Groestl256::default())
}
HashTypes::groestl384 => {
create_hash(message.as_ref().unwrap(), Groestl384::default())
}
HashTypes::groestl512 => {
create_hash(message.as_ref().unwrap(), Groestl512::default())
}
};
let res = HashGroestl::create_hash("asdfasdf", Groestl256::default());
println!("Result: {:x}", res);
Run Code Online (Sandbox Code Playgroud)
由于返回数组的大小不同,这会导致匹配臂具有不兼容的类型。我试图通过返回一个字符串而不是 GenericArray 来绕过这个问题。
当我想返回一个字符串时,结果create_hash …