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

rust语言实现超级简单的杀毒软件,通过哈希扫描病毒。

以下是一个简单的rust语言程序,用于扫描病毒文件并使用哈希表进行比较。该程序可以扫描指定目录中的所有文件,并查找其中是否包含特定的病毒文件。程序可以通过计算文件哈希值并将其与已知的病毒哈希值进行比较来确定文件是否是病毒。注意,这只是一个简单的示例程序,不能完全保证检测所有病毒。

use std::collections::HashMap;

use std::fs;

use std::io::Read;

use std::path::Path;

use crypto::digest::Digest;

use crypto::sha2::Sha256;

// 定义哈希表

let mut virus_db = HashMap::new();

// 添加病毒哈希值到哈希表中

virus_db.insert("8e6357ab1f7620f3a3c8f8d3037e5dc5", "Virus A");

virus_db.insert("7b58d439dc3e3d24c8b2df1277e5d5a5", "Virus B");

virus_db.insert("9f6849dcdf933a6466c36c6e2f771bad", "Virus C");

// 扫描文件哈希值,检查是否存在病毒

let file_hash = "7b58d439dc3e3d24c8b2df1277e5d5a5";

if virus_db.contains_key(file_hash) {

println!("File is infected with {}", virus_db.get(file_hash).unwrap());

} else {

println!("File is clean");

}

这个示例程序使用了 Rust 语言的哈希表(HashMap)实现了简单的杀毒软件功能。首先定义了一个空的哈希表 virus_db,然后添加了一些病毒的哈希值和对应的病毒名称到哈希表中。接着,扫描文件的哈希值,如果哈希表中存在对应的病毒哈希值,就说明文件被感染了。否则,文件是安全的。

创建一个函数用于计算文件的哈希值:

fn calculate_hash(file_path: &Path) -> String {

let mut file = match fs::File::open(file_path) {

Ok(file) => file,

Err(_) => panic!("Cannot open file"),

};

let mut hasher = Sha256::new();

let mut buffer = [0; 1024];

loop {

let num_bytes_read = match file.read(&mut buffer) {

Ok(num_bytes_read) => num_bytes_read,

Err(_) => panic!("Cannot read from file"),

};

if num_bytes_read == 0 {

break;

}

hasher.input(&buffer[..num_bytes_read]);

}

hasher.result_str()

}

这个函数接受一个文件路径,返回该文件的哈希值。

遍历指定目录下的所有文件,计算哈希值,并保存到哈希表中:

let path = Path::new("path/to/directory");

let mut hash_map = HashMap::new();

for entry in fs::read_dir(path).unwrap() {

let entry = entry.unwrap();

let path = entry.path();

if path.is_file() {

let hash_value = calculate_hash(&path);

hash_map.insert(path.to_str().unwrap().to_string(), hash_value);

}

}

这段代码会遍历指定目录下的所有文件,对每个文件调用calculate_hash函数计算哈希值,并将文件路径和哈希值保存到哈希表中。

最后,我们可以通过遍历哈希表来输出所有文件的哈希值:

for (path, hash_value) in &hash_map {

println!("{}: {}", path, hash_value);

}

这段代码会遍历哈希表中的每个键值对,输出文件路径和哈希值。

相关文章:

rust语言实现超级简单的杀毒软件,通过哈希扫描病毒。

以下是一个简单的rust语言程序,用于扫描病毒文件并使用哈希表进行比较。该程序可以扫描指定目录中的所有文件,并查找其中是否包含特定的病毒文件。程序可以通过计算文件哈希值并将其与已知的病毒哈希值进行比较来确定文件是否是病毒。注意,这…...

Git仓库中的常用命令

1.第一次使用Git软件前,告诉Git你是谁 git config --global user.name "自定义用户名" git config --global user.email "用户邮箱" 2.查看配置列表 git config --list 3.初始化一个Git仓库,用来管理当前项目 git i…...

arduino和stm32和51和TSM32的区别,树莓派和jetson nano的区别

本科时段接触过很多嵌入式的微处理器和微控制器,但对其使用场景和区别一直没有一个总结,这次收集了一些信息在这总结一下。 Arduino、STM32、51、TMS320和树莓派和jetson nano都是不同的嵌入式系统,它们之间有以下的区别: 开发难度…...

如何进行nginx的负载配置

示例://多机负载策略:加权轮询(适用于服务器无状态,并且服务器硬件配置不均衡的场景)upstream setServ { server 47.100.110.58:80 weight1; server 47.100.110.59:8080 weight4; }location / {//转发到负载服务上proxy_pass http://setServ;}注意&#…...

从功能测试进阶自动化测试,熬夜7天整理出这一份3000字超全学习指南

一、为什么要学习自动化测试? 如果在前两年,可能10个测试员有6个都是做的功能测试,但随着测试技术的发展以及测试工作的深入,传统的手工测试已经无法满足多模块的测试需求,所以为了提高测试效率和测试质量&#xff0c…...

[NOIP2011 提高组] 铺地毯

[NOIP2011 提高组] 铺地毯 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1 到 n。现在将这些地毯按照编号从小到大的顺序平行于…...

mac下ElasticSearch 集群搭建,使用Kibana配置和管理集群

Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elasticsearch将无法组成集群.会报错,Kibana也无法启动,因为…...

【软件测试】自动化测试的追求,水土不服?看看资深测试咋说的......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 大部分测试初学者入…...

Mac mini 外接移动硬盘无法显示,磁盘工具装载报错显示 com apple diskmanagement disenter

使用“启动安全性实用工具”可确保 Mac 始终从您指定的启动磁盘以及合法的受信任操作系统启动。 如果您使用的是配备 Apple T2 安全芯片的 Mac,则“启动安全性实用工具”提供以下三项功能来帮助保护您的 Mac 免受未经授权的访问:固件密码保护、安全启动…...

【图像处理OpenCV(C++版)】——4.6 限制对比度的自适应直方图均衡化

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快…...

设计模式--工厂模式

这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。   工厂模式主要使用了C的多态特性。将存在继承关系的类&a…...

算法笔记(十三)—— 树形DP及Morris遍历

树形DP: Question1: 以X为头结点的树,最大距离: 1. X不参与,在左子树上的最大距离 2. X不参与,在右子树上的最大距离 3. X参与,左树上最远的结点通过X到右树最远的结点 最后的结果一定是三种情况的最大…...

【Classical Network】EfficientNetV2

原文地址 原文代码 pytorch实现1 pytorch实现2 详细讲解 文章目录EfficientNet中存在的问题NAS 搜索EfficientNetV2 网络结构codeEfficientNet中存在的问题 训练图像尺寸大时,训练速度非常慢。train size 512, batch 24时,V100 out of memory在网络浅…...

索引类型FULLTEXT、NORMAL、SPATIAL、UNIQUE的区别

SQL索引的创建及使用请移步另一篇文章 (188条消息) SQL索引的创建及使用_sql索引的建立与使用_t梧桐树t的博客-CSDN博客 索引的种类 NORMAL 表示普通索引,大多数情况下都可以使用 UNIQUE 表示唯一索引,不允许重复的索引,如果该字段信息…...

稳定、可控、高可用:运维最应该加持哪些技术 buff?

如何保障开发需求高效交付,系统高峰扛得住、长期平稳,是项目组中的每位技术人必须面对的问题。 本文大纲 1、强稳定性Buff 2、风控服务实时性Buff 3、高资源利用率Buff 1.强稳定性Buff 强稳定性背后有三大挑战,其一是应对发布变更引起故障问…...

动态网站开发讲课笔记02:Java Web概述

文章目录零、本讲学习目标一、 XML基础(一)XML概述1、XML2、XML与HTML的比较(二)XML语法1、XML文档的声明2、XML元素的定义3、XML属性的定义4、XML注释的定义5、XML文件示例(三)DTD约束1、什么是XML约束2、…...

如何保护 IP 地址的隐私问题

是不是只有运营商才能查到某个人的住址信息呢?在大数据时代的今天,各种互联网应用收集了大量的数据信息,它们其实也可以根据这些信息,推断出某个人的大致地址位置。例如百度地图会一直用 App SDK 以及网页的方式记录 IP 和地址位置…...

高并发系统设计之限流

本文已收录至Github,推荐阅读 👉 Java随想录 文章目录限流算法计数器算法滑动窗口漏桶算法令牌桶算法限流算法实现Guava RateLimiter实现限流令牌预分配预热限流Nginx 限流limit_connlimit_req黑白名单限流这篇文章来讲讲限流,在高并发系统中…...

ZCMU--5286: Rose的字符串(C语言)

Description 一天Rose同学想得到一个仅由01组成的字符串S,Jack同学为了让Rose同学开心,于是打算去商店购买另一个也仅由01组成的字符串T。而商店的字符串价格由它的长度决定,比如字符串011售价3元,001011售价6元,商店…...

MAC下搭建hadoop

一:简介 Hadoop是一个用Java开发的开源框架,它允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储。特别适合写一次,读多次的场景。 Hado…...

亿万富翁不再相信比特币

亿万富翁首次公开称不再相信比特币的「数字黄金」叙事。对比特币而言,或许是一个重要转折点。5月22日,亿万富翁投资者马克库班表示, 在对比特币作为抵御法币疲软和地缘政治不稳定对冲工具的作用失去信心后, 他已经卖掉大部分比特币持仓。净资产约为100亿…...

WSABuilds安装挑战:从“包注册失败“到“架构不匹配“的完整解决指南

WSABuilds安装挑战:从"包注册失败"到"架构不匹配"的完整解决指南 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/o…...

量子机器学习实战:从QSVM到QNN的构建、优化与避坑指南

1. 量子机器学习实战:从理论到落地的核心挑战量子机器学习(QML)听起来像是科幻小说里的概念,但作为一名在量子计算和机器学习交叉领域摸爬滚打了多年的从业者,我可以负责任地说,它已经从一个纯粹的学术构想…...

机器学习预测细菌耐药性:从全基因组数据到公共卫生预警

1. 项目概述与核心价值抗菌药物耐药性(AMR)这事儿,现在谁提起来都头疼。它不再是实验室报告上的一个数字,而是直接关系到我们每个人生病了还有没有药可用的现实问题。弯曲杆菌,这个听起来有点拗口的名字,其…...

Wand-Enhancer终极指南:免费解锁WeMod专业版的完整教程

Wand-Enhancer终极指南:免费解锁WeMod专业版的完整教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费用而烦…...

从红宝石到光纤:固体激光器家族里,谁才是工业加工界的‘六边形战士’?

从红宝石到光纤:固体激光器家族里,谁才是工业加工界的‘六边形战士’? 在金属切割车间里,激光束正以毫米级精度划过不锈钢板;精密电子产线上,纳米级激光打标机为电路板刻印追溯码;汽车焊接工段…...

Keil µVision中实现函数级编译时间戳追踪方案

1. 在Vision调试器中追踪函数编写时间的完整方案作为一名嵌入式开发老手,我经常需要回溯某个关键函数的最后修改时间。特别是在团队协作或维护遗留代码时,准确掌握函数级别的版本信息能大幅提升调试效率。今天要分享的正是如何在Keil Vision调试环境中实…...

Von Neumann内存映射检测与MON51调试实践

1. 理解Von Neumann内存映射的基础概念在嵌入式系统开发中,内存架构的选择直接影响着程序的执行效率和硬件设计。Von Neumann架构与哈佛架构是两种最基本的内存组织方式,而MON51调试器需要明确识别目标硬件的内存映射方式才能正常工作。Von Neumann架构的…...

机器学习赋能银河系考古:CatBoost模型高精度预测恒星年龄

1. 项目概述:用机器学习为银河系“测龄”在银河系考古学这个领域,我们就像是在研究一部没有文字记载的古老家族史。恒星,作为这部历史书中的“化石”,它们的年龄是解读银河系过去130亿年里如何诞生、成长和演化的最关键线索。然而…...

raft一致性协议

Raft 协议raft协议是基于TCP的选举机制:时间 日志 版本核心三要素:时间 (随机超时):Follower 都有一个选举超时时间(例如 150ms ~ 300ms 的随机值)。作用:防止多个 Follower 同时变成 Candidate 导致选票…...