网站邮件设置方法,wordpress 文章 图片 插件,马鞍山 做网站,自动摘要wordpress文章目录 一、实现Sha-256加密1.创建项目2.编写Cargo.toml文件3.编写程序代码 二、sha256爆破1.获取命令行参数2.读取文件3.校验输入参数4.暴力破解 一、实现Sha-256加密 SHA-256是一种安全哈希算法#xff0c;主要特点是将输入的数据#xff08;无论长度#xff09;通过特定… 文章目录 一、实现Sha-256加密1.创建项目2.编写Cargo.toml文件3.编写程序代码 二、sha256爆破1.获取命令行参数2.读取文件3.校验输入参数4.暴力破解 一、实现Sha-256加密 SHA-256是一种安全哈希算法主要特点是将输入的数据无论长度通过特定的计算方式生成一个固定长度为256位的哈希值通常表示为64个十六进制字符。基于其单向性即从哈希值无法逆推出原始输入数据通常被用于密码的存储。 SHA-256是SHA-1算法的后继者其名称来源于安全散列算法2Secure Hash Algorithm 2的缩写。SHA-2系列下包含六个不同的算法标准分别是SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。这些变体在生成摘要的长度和一些微小细节上有所不同但基本结构是一致的。
1.创建项目
$ cargo new sha256_cracker2.编写Cargo.toml文件 因为Rust标准库本身并不直接提供SHA-256功能通常使用外部库sha2完成它提供了SHA-256以及其他SHA-2哈希算法的实现。 [package]
name sha256_cracker
version 0.1.0
edition 2021# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
# 以上为cargo自动创建添加下面库就可以[dependencies]
sha2 0.9.9
hex 0.43.编写程序代码
use sha2::{Digest, Sha256}; fn main() { let data admin123; let hash Sha256::digest(data.as_bytes()); // 将结果转换为十六进制字符串表示 let hash_hex hex::encode(hash); println!(SHA-256 hash of {} is {}, data, hash_hex); //SHA-256 hash of admin123 is 240be518fabd2724ddb6f04eeb1da5967448d7e831c08c8fa822809f74c720a9
}二、sha256爆破 基于其单向性即从哈希值无法逆推出原始输入数据目前只能通过暴力破解的方式对密码进行匹配。 1.获取命令行参数
use std::env;
fn main() {let args: VecString env::args().collect();println!({:?},args); //[./sha256_cracker, 111, 222]
}2.读取文件
use std::{env,error::Error,fs::File,io::{BufRead, BufReader},
};
fn main() - Result(), Boxdyn Error {let args: VecString env::args().collect();let wordlist_file File::open(args[1])?;let reader BufReader::new(wordlist_file);for line in reader.lines() {let line line?.trim().to_string();println!({}, line);}Ok(())
}# /home/kali/Desktop/ctf/pass.txt是密码字典
$ ./sha256_cracker /home/kali/Desktop/ctf/pass.txt
admin888
test
123qwe
password123
1q2w3e
test123
mysql
....3.校验输入参数
use std::{env,error::Error,fs::File,io::{BufRead, BufReader},
};
// 定义sha245 hash字符串的长度
const SHA256_HEX_STRING_LENGTH: usize 64;
fn main() - Result(), Boxdyn Error {let args: VecString env::args().collect();// 输入参数校验参数不足提示输入格式if args.len() ! 3 {println!(Usage:);println!(sha256_cracker: wordlist.txt sha256_hash);return Ok(());}// 校验sha245十六进制字符串长度不是64位提示错误let hash_to_crack args[2].trim();if hash_to_crack.len() ! SHA256_HEX_STRING_LENGTH {return Err(sha256 hash is not valid.into());}// 读取文件let wordlist_file File::open(args[1])?;let reader BufReader::new(wordlist_file);for line in reader.lines() {let line line?.trim().to_string();println!({}, line);}Ok(())
}4.暴力破解
use std::{env,error::Error,fs::File,io::{BufRead, BufReader},
};
use sha2::{Digest, Sha256};
// 定义sha245 hash字符串的长度
const SHA256_HEX_STRING_LENGTH: usize 64;
fn main() - Result(), Boxdyn Error {// 获取输出参数let args: VecString env::args().collect();// 输入参数校验参数不足提示输入格式if args.len() ! 3 {println!(Usage:);println!(sha256_cracker: wordlist.txt sha256_hash);return Ok(());}// 校验sha245十六进制字符串长度不是64位提示错误let hash_to_crack args[2].trim();if hash_to_crack.len() ! SHA256_HEX_STRING_LENGTH {return Err(sha256 hash is not valid.into());}// 读取文件let wordlist_file File::open(args[1])?;let reader BufReader::new(wordlist_file);for line in reader.lines() {// 逐行读取并对读取的字符串进行sha256加密let line line?.trim().to_string();let hash Sha256::digest(line.as_bytes()); let hash_hex hex::encode(hash); // 匹配加密字符串如果一致则输出if hash_hex args[2]{println!(Succeedpassword is : {},line);return Ok(());}}println!(Failed ... password is not found!);return Ok(());
}
本文部分内容参考《black hat rust》一书