当前位置: 首页 > 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…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...

Web后端基础(基础知识)

BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...