use md5::{Digest, Md5}; use std::fmt::Write; use std::io::Write as WriteI; static INPUT: &'static [u8] = b"yzbqklnj"; fn main() { let mut buf = Vec::with_capacity(INPUT.len() + 10); buf.extend_from_slice(INPUT); for i in 0.. { if i % 1000 == 0 { print!("{i}\r"); std::io::stdout().flush(); } let mut hasher = Md5::new(); write!(&mut buf, "{i}"); hasher.update(buf.as_slice()); let hash = hasher.finalize(); if hash.starts_with(&[0, 0]) && hash[2] < 16 { let mut hexhash = String::with_capacity(32); for digit in hash { write!(&mut hexhash, "{digit:02x}"); } println!("Got 5 digit hash: {hexhash}, at {i}"); break; } buf.truncate(INPUT.len()); } for i in 0.. { if i % 1000 == 0 { print!("{i}\r"); std::io::stdout().flush(); } let mut hasher = Md5::new(); write!(&mut buf, "{i}"); hasher.update(buf.as_slice()); let hash = hasher.finalize(); if hash.starts_with(&[0, 0, 0]) { let mut hexhash = String::with_capacity(32); for digit in hash { write!(&mut hexhash, "{digit:02x}"); } println!("Got 6 digit hash: {hexhash}, at {i}"); break; } buf.truncate(INPUT.len()); } }