rust:sha1解码器

admin 2024年1月28日21:16:27评论11 views字数 2253阅读7分30秒阅读模式

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

方便以后调用,建库项目直接封装👩‍🏫

rust:sha1解码器

新建一个sha1_cracker的文件夹,包含一个名为Cargo.toml库配置文件和一个名为src的文件夹

rust:sha1解码器

②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

rust:sha1解码器

⑤运行测试

cargo run -- wordlist.txt 7c6a61c68ef8b9b6b061b28c348bc1ed7921cb53

rust:sha1解码器

原文始发于微信公众号(qingjiegong):rust:sha1解码器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月28日21:16:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   rust:sha1解码器http://cn-sec.com/archives/2437173.html

发表评论

匿名网友 填写信息