一、实现Sha-256加密
SHA-256是一种安全哈希算法,主要特点是将输入的数据(无论长度)通过特定的计算方式,生成一个固定长度为256位的哈希值,通常表示为64个十六进制字符。基于其单向性,即从哈希值无法逆推出原始输入数据,通常被用于密码的存储。
SHA-256是SHA-1算法的后继者,其名称来源于安全散列算法2(Secure Hash Algorithm 2)的缩写。SHA-2系列下包含六个不同的算法标准,分别是SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。这些变体在生成摘要的长度和一些微小细节上有所不同,但基本结构是一致的。
1.创建项目
$ cargo new sha256_cracker
2.编写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.4"
3.编写程序代码
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: Vec<String> = env::args().collect();
println!("{:?}",args); //["./sha256_cracker", "111", "222"]
}
2.读取文件
use std