当前位置: 首页 > news >正文

Rust语言之sha-256爆破

文章目录

  • 一、实现Sha-256加密
    • 1.创建项目
    • 2.编写Cargo.toml文件
    • 3.编写程序代码
  • 二、sha256爆破
    • 1.获取命令行参数
    • 2.读取文件
    • 3.校验输入参数
    • 4.暴力破解


一、实现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》一书

相关文章:

Rust语言之sha-256爆破

文章目录 一、实现Sha-256加密1.创建项目2.编写Cargo.toml文件3.编写程序代码 二、sha256爆破1.获取命令行参数2.读取文件3.校验输入参数4.暴力破解 一、实现Sha-256加密 SHA-256是一种安全哈希算法&#xff0c;主要特点是将输入的数据&#xff08;无论长度&#xff09;通过特定…...

Rust中的字符串处理及相关方法详解

在Rust中&#xff0c;字符串是一种非常重要的数据类型&#xff0c;而String类型则提供了对动态可变字符串的支持。本文将介绍一些常见的字符串处理方法以及相关示例代码。 创建字符串 在Rust中&#xff0c;有多种方式创建字符串&#xff0c;以下是一些常见的例子&#xff1a;…...

NS安装-CentOS服务器安装Nightscout CGM

NS CGM 安装必要条件 有自己的云服务器好像没有2&#xff0c;有云服务器就行了 安装顺序 先安装数据库&#xff0c;目前支持的是 MongoDB &#xff0c;官方推荐4&#xff0c;其实目前最新版本就行。可以用宝塔安装&#xff0c;比较简单克隆代码&#xff0c;我是放到 /opt/ns…...

利用ChatGPT提升工作效率

随着科技的飞速发展&#xff0c;人工智能逐渐成为我们生活的一部分。ChatGPT作为一种先进的自然语言处理技术&#xff0c;已经在各个领域取得了显著的成果。本文将探讨如何利用ChatGPT提升工作效率&#xff0c;让我们的生活变得更加便捷。 一、什么是ChatGPT&#xff1f; ChatG…...

django admin页面美化

美化 Django Admin 页面可以通过多种方式实现&#xff0c;从简单的 CSS 样式调整到完全自定义模板。以下是一些建议和步骤来美化 Django Admin 页面&#xff1a; 1. 使用 CSS 覆盖默认样式 这是最简单的方法&#xff0c;你可以通过添加自定义 CSS 文件来覆盖 Django Admin 的…...

Git 操作以及Git 常见问题

Git 操作 git 教程&#xff1a;https://www.runoob.com/git/git-tutorial.html 基本概念 工作区&#xff1a;克隆项目到本地后&#xff0c;项目所在的文件夹&#xff1b; 暂存区&#xff1a;从工作区添加上来的变更&#xff08;新增&#xff0c;修改&#xff0c;删除&#xff…...

如何学习和规划类似ChatGPT这种人工智能(AI)相关技术

学习和规划类似ChatGPT这种人工智能&#xff08;AI&#xff09;相关技术的路径通常包括以下步骤&#xff1a; 学习基础知识&#xff1a; 学习编程&#xff1a;首先&#xff0c;你需要学习一种编程语言&#xff0c;例如Python&#xff0c;这是大多数人工智能项目的首选语言。数学…...

4 月 9 日至 4 月 10 日,Hack.Summit() 2024 首聚香江

Hack.Summit() 是一系列 Web3 开发者大会。2024 年的活动将于 2024 年 4 月 9 日至 4 月 10 日在香港数码港举行。自十年前首次举办以来&#xff0c;此次会议标志着 Hack.Summit() 首次在亚洲举办&#xff0c;香港被选为首次亚洲主办城市&#xff0c;这对 Hack VC 和该地区都具…...

[力扣 Hot100]Day29 删除链表的倒数第 N 个结点

题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 出处 思路 两个指针间隔n&#xff0c;一趟遍历解决。 代码 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* phead;ListNode* …...

探索设计模式的魅力:掌握命令模式-解锁软件设计的‘遥控器’

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 引言&#xff1a;探索命令模式的奥秘 软件设计领域充满挑战与机遇&#xff0c;命令模式…...

LNMP搭建discuz论坛

discuz论坛是一种网络论坛软件&#xff0c;也称bbs&#xff0c;它是一种用于在互联网上建立论坛社区的程序系统。只哟中功能强大的论坛软件&#xff0c;可以帮助用户建立一个专业、完善的论坛社区&#xff0c;并且可以实现多种功能&#xff0c;如搭建用户注册、登录、查看主题、…...

257.【华为OD机试真题】幼儿园篮球游戏(贪心算法-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…...

[计算机网络]深度学习传输层TCP协议

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;深度学习传输层TCP协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 [计算机网络]深度学习传输层TCP协议 前提概括一: TCP协议段格式二:确认应答三:超时重传四:…...

动态头部:统一目标检测头部与注意力

摘要 在目标检测中&#xff0c;定位与分类相结合的复杂性导致了各种方法的蓬勃发展。以前的工作试图提高在不同的目标检测头的性能&#xff0c;但未能呈现一个统一的视图。在本文中&#xff0c;我们提出了一种新的动态头部框架来统一目标检测头部和注意力。通过在尺度感知的特…...

【状态估计】深度传感器与深度估计算法(1/3)

深度传感器与深度估计算法 深度传感器概念 获得空间中目标位置或距离的传感器&#xff0c;按接收的媒介波来源可分为主动式和被动式两大范畴&#xff0c;主动式包括激光雷达、雷达、超声波传感器等&#xff0c;被动式主要为单目、多目相机等&#xff0c;同时两大类可组合为混…...

ClickHouse从入门到精通(高级)

第1章 Explain查看执行计划 第2章 建表优化 第3章 ClickHouse语法优化规则 第4章 查询优化 第5章 数据一致性(重点) 第6章 物化视图 第7章 MaterializeMySQL引擎 第8章 常见问题排查...

什么是Docker的容器编排工具,它们之间有何不同?

随着Docker容器技术的广泛应用&#xff0c;容器编排工具成为了自动化部署、扩展和管理容器化应用程序的关键组件。这些工具提供了一种抽象层&#xff0c;帮助开发者和管理员更高效地管理大量的Docker容器&#xff0c;确保它们在不同的主机和环境中能够可靠地运行。目前&#xf…...

qml之Control类型布局讲解,padding属性和Inset属性细讲

1、Control布局图 2、如何理解&#xff1f; *padding和*Inset参数如何理解呢&#xff1f; //main.qml import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 1.4 import QtQml 2.12ApplicationWindow {id: windowvisible: …...

【Jvm】性能调优(拓展)Jprofiler如何监控和解决死锁、内存泄露问题

文章目录 Jprofiler简介1.安装及IDEA集成Jprofiler2.如何监控并解决死锁3.如何监控及解决内存泄露(重点)4.总结5.后话 Jprofiler简介 Jprofilers是针对Java开发的性能分析工具(免费试用10天), 可以对Java程序的内存,CPU,线程,GC,锁等进行监控和分析, 1.安装及IDEA集成Jprofil…...

运行错误(竞赛遇到的问题)

在代码提交时会遇见这样的错误&#xff1a; 此处运行错误不同于编译错误和答案错误&#xff0c;运行错误是指是由于在代码运行时发生错误&#xff0c;运行错误可能是由于逻辑错误、数据问题、资源问题等原因引起的。这些错误可能导致程序在运行时出现异常、崩溃。 导致不会显示…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...