sha-1
【密码学】一文读懂SHA-1 - 知乎 (zhihu.com)
重点:
SHA1产生一个160位(20字节)的哈希值,通常表示为十六进制数字,长度为40位
算法名称 | 散列值长度 | 是否安全 |
---|---|---|
MD5 | 128 | 不安全 |
SHA-1 | 160 | 不安全 |
SHA-224 | 224 | 安全 |
SHA-256 | 256 | 安全 |
SHA-384 | 384 | 安全 |
SHA-512 | 512 | 安全 |
SHA-512/224 | 224 | 安全 |
SHA-512/256 | 256 | 安全 |
SHA3-224 | 224 | 安全 |
SHA3-256 | 256 | 安全 |
SHA3-384 | 384 | 安全 |
SHA3-512 | 512 | 安全 |
实操
conda创建虚拟环境
构建rust虚拟环境
conda create -c conda-forge -n sha1_cracker rust
conda create — conda 23.11.1.dev62 文档
-c conda-forge 从conda-forge通道安装该环境所需的所有软件包
-n sha1_cracker创建的虚拟环境名为:sha1_cracker
然后便是正常的rust shell安装步骤了
验证rust环境(conda查看虚拟环境镜像)
conda info --envs
激活环境
conda activate sha1_cracker
查看环境版本
rustc --version
停用环境:
conda deactivate
永久删除环境
conda env remove -n sha1_cracker
编程
①创建一个新库项目
cargo new --lib sha1_cracker
方便以后调用,建库项目直接封装👩🏫
新建一个sha1_cracker的文件夹,包含一个名为Cargo.toml库配置文件和一个名为src的文件夹
②src文件夹中新建主程序文件:main.rs
// 引入 sha1::Digest 模块,用于计算 SHA1 哈希值
use sha1::Digest;
// 引入标准库中的一些模块和类型:env环境,error错误异常处理,fs、io文件操作
use std::{
env,
error::Error,
fs::File,
io::{BufRead, BufReader},
};
// 定义常量 SHA1_HEX_STRING_LENGTH,表示 SHA1 哈希值的长度为 40 个字符
const SHA1_HEX_STRING_LENGTH: usize = 40;
fn main() -> Result<(), Box<dyn Error>> {
// 获取命令行参数
let args: Vec<String> = env::args().collect();
// 如果参数数量不等于 3,输出使用方法并返回成功
if args.len() != 3 {
println!("Usage:");
println!("sha1_cracker: <wordlist.txt> <sha1_hash>");
return Ok(());
}
// 获取待破解的 SHA1 哈希值
let hash_to_crack = args[2].trim();
// 如果哈希值长度不等于 40,返回错误信息
if hash_to_crack.len() != SHA1_HEX_STRING_LENGTH {
return Err("sha1 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?;
let common_password = line.trim();
// 计算当前行的 SHA1 哈希值,并与待破解的哈希值进行比较
if hash_to_crack == &hex::encode(sha1::Sha1::digest(common_password.as_bytes())) {
// 如果找到匹配的哈希值,输出密码并返回成功
println!("Password found: {}", &common_password);
return Ok(());
}
}
// 如果未找到匹配的哈希值,输出提示信息
println!("password not found in wordlist :(");
// 返回成功,相当于 return Ok(());
Ok(())
}
③修改Cargo.toml
文件,以便将sha1_cracker
库与main.rs
文件中的代码关联起来。
[package]
name = "sha1_cracker"
version = "0.1.0"
authors = ["qingjiegong"]
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
sha-1 = "0.10"
hex = "0.4"
④构建封装
cargo build
⑤运行测试
cargo run -- wordlist.txt 7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53
原文始发于微信公众号(qingjiegong):rust:sha1解码器
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论