Rust语言之sha-256爆破

这篇具有很好参考价值的文章主要介绍了Rust语言之sha-256爆破。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、实现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::{
    env,
    error::Error,
    fs::File,
    io::{BufRead, BufReader},
};
fn main() -> Result<(), Box<dyn Error>> {
    let args: Vec<String> = 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<(), Box<dyn Error>> {
    let args: Vec<String> = 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<(), Box<dyn Error>> {
	// 获取输出参数
    let args: Vec<String> = 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!("Succeed!password is : {}",line);
            return Ok(());
        }
    }
    println!("Failed ... password is not found!");
    return Ok(());
}

本文部分内容参考《black hat rust》一书文章来源地址https://www.toymoban.com/news/detail-831353.html

到了这里,关于Rust语言之sha-256爆破的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FIPS 180-2 散列算法SHA-224、SHA-256、SHA-384 和 SHA-512 的C语言快速软件实施:理论与实践

    一、安全散列算法(SHA)简介 安全散列算法(Secure Hash Algorithm,简称SHA)是美国国家安全局(NSA)研发的一种密码散列函数算法标准,由美国国家标准与技术研究院(NIST)认证[3]。SHA系列算法包括SHA-1、SHA-224、SHA-256、SHA-384 和SHA-512 等变体[1]。在本文中,我们将重点介绍FI

    2024年02月14日
    浏览(68)
  • SHA-256算法及示例

    SHA-256(安全哈希算法,FIPS 182-2)是密码学哈希函数,其摘要长度为256位。SHA-256为keyless哈希函数,即为MDC(Manipulation Detection Code)。【MAC消息认证码有key,不是keyless的。】 SHA-256哈希函数可定义为: 其中: 输入:消息 M M M 为任意长度的字节数组。 输出:在 [ 0 , 2 256 ) [0,2

    2024年02月10日
    浏览(67)
  • 保障安全的散列算法 - SHA256

    SHA-256是由美国国家安全局(NSA)开发的SHA-2密码哈希函数之一,用于数字签名和区块链。在计算机科学和信息安全领域,SHA-256 (安全哈希算法 256位) 是广受欢迎且常被使用的密码学散列函数。SHA-256 产生一个唯一、定长的256位 (32字节)散列值,不仅可以用于密码学中信息的安全存

    2024年04月12日
    浏览(71)
  • Android Apk签名算法使用SHA256

    Android apk签名算法使用SHA256 本文不介绍复杂的签名过程,说一下Android签名算法使用SHA256。 但是SHA1不是相对安全签名算法,SHA256更加安全一些。 一般大公司才会有这种细致的安全要求。 如何查看apk签名是否是SHA1还是SHA256 ··· 1、拿到apk文件,修改文件后缀为.jar 2、解压文件

    2024年04月08日
    浏览(108)
  • Rust语言从入门到入坑——(2)Rust在windows上搭建开发环境

    开始搭建一个适合在windows上运行的Rust环境。 Rust支持的程序语言很多:可详见官网介绍 本文章主要是在windowns下搭建开发环境 首先,需要安装最新版的 Rust 编译工具和 Visual Studio Code。 Rust 编译工具:https://www.rust-lang.org/zh-CN/tools/install Visual Studio Code:https://code.visualstudio.com

    2024年02月09日
    浏览(50)
  • SHA-256算法的原理与C/C++实现

    SHA-256 是一种加密哈希函数,旨在将任意大小的数据映射到一个固定大小的哈希值,通常是 256 位(32 字节)。它属于 SHA-2(安全哈希算法 2)家族,旨在提供更高的安全性。 SHA-256 的设计原则包括以下关键步骤: 消息填充 :输入消息的位数必须是 512 的倍数。因此,第一步是

    2024年04月17日
    浏览(98)
  • openssl+sha256开发实例(C++)

    SHA-256(Secure Hash Algorithm 256-bit)是一种哈希算法,属于 SHA-2(Secure Hash Algorithm 2)家族的一员。SHA-256 产生的哈希值是一个256位(32字节)的二进制数字,通常以64个十六进制字符的形式表示。 以下是 SHA-256 的一些关键特点和应用: 安全性: SHA-256 被广泛认为是安全的哈希算法

    2024年01月17日
    浏览(46)
  • Rust软件外包开发语言的特点

    Rust 是一种系统级编程语言,强调性能、安全性和并发性的编程语言,适用于广泛的应用领域,特别是那些需要高度可靠性和高性能的场景。下面和大家分享 Rust 语言的一些主要特点以及适用的场合,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公

    2024年02月12日
    浏览(47)
  • rust的哈希表

    以上两种方法都必须保证访问的元素存在,否则会报错 哈希表中的元素没有顺序 两种方法,contains_key和entry contains_key方法用于检查HashMap中是否包含特定的键 它返回一个布尔值,指示键是否存在。 entry方法用于高效地处理键值对的插入和更新 它返回一个Entry枚举,可以是Oc

    2024年02月19日
    浏览(27)
  • Java工具集 Hex、Hmac算法(MD5、SHA1、SHA256、SHA384、SHA512)、雪花算法SnowflakeId、redis基于Springboot工具类

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 专栏 描述 Java项目实战 介绍Java组件安装、使用;手写框架等 Aws服务器实战 Aws Linux服务器上操作nginx、git、JDK、Vue Jav

    2024年04月09日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包