01.SHA-1 hash cracker

hash cracker的意义

主要是为了熟悉Rust的语法,市面上有很多的hash cracker,比如hashcat等程序,他们优化得很好,建议使用他们。

破解的流程

从上面的SHA-1函数的输入和输出可以看到,我们需要用一个wordlist生成hash。然后和已有的hash进行比较。

那么我们这个工具的命令行如下:

sha1_cracker: <wordlist.txt> <sha1_hash>

我们开始用一个初始程序,这个程序得到传进来的参数并检查参数是否符合要求

use std:: {
    env,
    error::Error,
};

const SHA1_HEX_STRING_LENGTH: usize = 40;


fn main() -> Result<(), Box<dyn Error>> {
   let args: Vec<String> = env::args().collect();

   if args.len() !=3 {
       //println!("input error");
       println!("Usage:\n      sha1_cracker: <wordlist.txt> <sha1_hash>");

       return Ok(());
   }

   let hash_to_crack = args[2].trim();

   if hash_to_crack.len() != SHA1_HEX_STRING_LENGTH {
       return  Err("sha1 hash is not valid".into());
   }

   Ok(())

}

后面就开始读字典来生成hash值并做对比

use sha1::Digest;

use std:: {
    env,
    error::Error,
    fs::File,
    io::{BufRead, BufReader},
};

const SHA1_HEX_STRING_LENGTH: usize = 40;


fn main() -> Result<(), Box<dyn Error>> {
   let args: Vec<String> = env::args().collect();

   if args.len() !=3 {
       //println!("input error");
       println!("Usage:\n      sha1_cracker: <wordlist.txt> <sha1_hash>");

       return Ok(());
   }

   let hash_to_crack = args[2].trim();

   if hash_to_crack.len() != SHA1_HEX_STRING_LENGTH {
       return  Err("sha1 hash is not valid".into());
   }

   let worldlist_file = File::open(&args[1])?;
   let reader = BufReader::new(&worldlist_file);

   for line in reader.lines() {
       let password = line?.trim().to_string();
       let gen_password = hex::encode(sha1::Sha1::digest(password.as_bytes()));
       println!("{}", gen_password);
       
       if hash_to_crack == gen_password {
           println!("password found: {}", &password);
           return Ok(());
       }
   }

   println!("passowrd not found in wordlist!");

   Ok(())

}



Github 链接:https://github.com/xxg1413/Hacking-with-Rust/tree/main/sha1_cracker

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

您正在使用您的 WordPress.com 账号评论。 注销 /  更改 )

Google photo

您正在使用您的 Google 账号评论。 注销 /  更改 )

Twitter picture

您正在使用您的 Twitter 账号评论。 注销 /  更改 )

Facebook photo

您正在使用您的 Facebook 账号评论。 注销 /  更改 )

Connecting to %s