第八周上机实践—项目4—字符串加密

从勒索病毒应急响应到攻击链溯源:Windows Server实战分析与工具指南 勒索病毒攻击是当前网络安全领域面临的严峻挑战,其核心原理在于利用加密算法锁定用户文件并索要赎金。理解其运作机制对于企业安全防护至关重要,这不仅涉及数据恢复的技术价值,更关乎业务连续性的保障。在实际的应急响应场景中,安全工程师需要快速评估威胁、遏制影响,并深入溯源攻击路径。常见的应用场景包括日志分析、文件取证和网络痕迹追踪,这些技术手段能帮助还原攻击者从入侵到加密的完整链条。本文聚焦于Windows Server环境下的实战演练,通过分析系统日志、追踪恶意文件上传与执行痕迹,并利用如FullEventLogV 阅读详情
/*
 *Copyright(c) 2015,烟台大学计算机学院
 *All rights reserved.
 *文件名称:test.cpp
 *作者:林莉
 *完成日期:2015年10月26日
 *版本:v1.0
 *
 *问题描述:设计一个程序,实现加密、解密算法,将输入的文本进行加密后输出,然后进行解密并输出。
 *输入描述:输入一串字符
 *程序输出:输出原字符,加密后的字符以及解密字符。
 */


1.头文件:sqString.h,包含定义链队数据结构的代码、宏定义、要实现算法的函数的声明;

#ifndef SqString_H_INCLUDED
#define SqString_H_INCLUDED

#define MaxSize 100             //最多的字符个数
typedef struct
{   char data[MaxSize];         //定义可容纳MaxSize个字符的空间
    int length;                 //标记当前实际串长
} SqString;

void StrAssign(SqString &s,char cstr[]);    //字符串常量cstr赋给串s
void StrCopy(SqString &s,SqString t);   //串t复制给串s
bool StrEqual(SqString s,SqString t); //判串相等
int StrLength(SqString s);  //求串长
SqString Concat(SqString s,SqString t);  //串连接
SqString SubStr(SqString s,int i,int j); //求子串
SqString InsStr(SqString s1,int i,SqString s2); //串插入
SqString DelStr(SqString s,int i,int j) ;   //串删去
SqString RepStr(SqString s,int i,int j,SqString t);     //串替换
void DispStr(SqString s);   //输出串

#endif // SqString_H_INCLUDED


2.源文件:sqString.cpp,包含实现各种算法的函数的定义

#include <stdio.h>
#include <malloc.h>
#include "SqString.h"

void StrAssign(SqString &s,char cstr[]) //s为引用型参数
{   int i;
    for (i=0;cstr[i]!='\0';i++)
        s.data[i]=cstr[i];
    s.length=i;
}
void StrCopy(SqString &s,SqString t)    //s为引用型参数
{   int i;
    for (i=0;i<t.length;i++)
        s.data[i]=t.data[i];
    s.length=t.length;
}
bool StrEqual(SqString s,SqString t)
{   bool same=true;
    int i;
    if (s.length!=t.length)             //长度不相等时返回0
        same=false;
    else
        for (i=0;i<s.length;i++)
            if (s.data[i]!=t.data[i])   //有一个对应字符不相同时返回0
            {   same=false;
                break;
            }
    return same;
}
int StrLength(SqString s)
{
    return s.length;
}
SqString Concat(SqString s,SqString t)
{   SqString str;
    int i;
    str.length=s.length+t.length;
    for (i=0;i<s.length;i++)    //将s.data[0..s.length-1]复制到str
        str.data[i]=s.data[i];
    for (i=0;i<t.length;i++)    //将t.data[0..t.length-1]复制到str
        str.data[s.length+i]=t.data[i];
    return str;
}
SqString SubStr(SqString s,int i,int j)
{   SqString str;
    int k;
    str.length=0;
    if (i<=0 || i>s.length || j<0 || i+j-1>s.length)
        return str;                 //参数不正确时返回空串
    for (k=i-1;k<i+j-1;k++)         //将s.data[i..i+j]复制到str
        str.data[k-i+1]=s.data[k];
    str.length=j;
    return str;
}
SqString InsStr(SqString s1,int i,SqString s2)
{   int j;
    SqString str;
    str.length=0;
    if (i<=0 || i>s1.length+1)  //参数不正确时返回空串
        return str;
    for (j=0;j<i-1;j++)             //将s1.data[0..i-2]复制到str
        str.data[j]=s1.data[j];
    for (j=0;j<s2.length;j++)       //将s2.data[0..s2.length-1]复制到str
        str.data[i+j-1]=s2.data[j];
    for (j=i-1;j<s1.length;j++)     //将s1.data[i-1..s1.length-1]复制到str
        str.data[s2.length+j]=s1.data[j];
    str.length=s1.length+s2.length;
    return str;
}
SqString DelStr(SqString s,int i,int j)
{   int k;
    SqString str;
    str.length=0;
    if (i<=0 || i>s.length || i+j>s.length+1) //参数不正确时返回空串
        return str;
    for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到str
        str.data[k]=s.data[k];
    for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到str
        str.data[k-j]=s.data[k];
    str.length=s.length-j;
    return str;
}
SqString RepStr(SqString s,int i,int j,SqString t)
{   int k;
    SqString str;
    str.length=0;
    if (i<=0 || i>s.length || i+j-1>s.length) //参数不正确时返回空串
        return str;
    for (k=0;k<i-1;k++)             //将s.data[0..i-2]复制到str
        str.data[k]=s.data[k];
    for (k=0;k<t.length;k++)        //将t.data[0..t.length-1]复制到str
        str.data[i+k-1]=t.data[k];
    for (k=i+j-1;k<s.length;k++)    //将s.data[i+j-1..s.length-1]复制到str
        str.data[t.length+k-j]=s.data[k];
    str.length=s.length-j+t.length;
    return str;
}
void DispStr(SqString s)
{   int i;
    if (s.length>0)
    {   for (i=0;i<s.length;i++)
            printf("%c",s.data[i]);
        printf("\n");
    }
}


3.测试函数:main.cpp,完成相关测试工作。

#include <stdio.h>
#include "sqString.h"

SqString A,B; //用于存储字符映射表

SqString EnCrypt(SqString p)
{
    int i=0,j;
    SqString q;
    while (i<p.length)
    {
        for (j=0; p.data[i]!=A.data[j]; j++);
        if (j>=p.length)            //在A串中未找到p.data[i]字母
            q.data[i]=p.data[i];
        else                        //在A串中找到p.data[i]字母
            q.data[i]=B.data[j];
        i++;
    }
    q.length=p.length;
    return q;
}

SqString UnEncrypt(SqString q)
{
    int i=0,j;
    SqString p;
    while (i<q.length)
    {
        for (j=0; q.data[i]!=B.data[j]; j++);
        if (j>=q.length)            //在B串中未找到q.data[i]字母
            p.data[i]=q.data[i];
        else                    //在B串中找到q.data[i]字母
            p.data[i]=A.data[j];
        i++;
    }
    p.length=q.length;
    return p;
}

int main()
{
    SqString p,q;
    StrAssign(A,"abcdefghijklmnopqrstuvwxyz");  //建立A串
    StrAssign(B,"ngzqtcobmuhelkpdawxfyivrsj");  //建立B串
    char str[MaxSize];
    printf("\n");
    printf("输入原文串:");
    gets(str);                                  //获取用户输入的原文串
    StrAssign(p,str);                           //建立p串
    printf("加密解密如下:\n");
    printf("  原文串:");
    DispStr(p);
    q=EnCrypt(p);                               //p串加密产生q串
    printf("  加密串:");
    DispStr(q);
    p=UnEncrypt(q);                         //q串解密产生p串
    printf("  解密串:");
    DispStr(p);
    printf("\n");
    return 0;
}


运行结果:

学习总结:学会了如何将字符串加密后瞬间觉得自己高大上了好多~

数据库之Redis运维手册(私人整理) 1、redis配置文件 #cat 8000.conf daemonize no #[yes/no]默认值no,该参数用于定制redis服务是否以守护模式运行。 pidfile /var/run/redis.pid #默认值/var/run/redis.pid,指定redis服务的进程号文件路径,以守护模式运行时需要配置本参数; port 8000 #默认值6379,指定redis服务... 阅读详情

相关推荐

C语言修佛成仙学习教程

有人问我怎么学习C语言,我来答复了

weixin_54707168的博客 1110

第八周 项目四--字符串加密

问题及代码: main.cpp: [cpp] view plain copy   /*                  Copyright (c)2016,烟台大学计算机与控制工程学院                  All rights reserved.                  文件名称:字符串加密.cpp          

qq_35999126的博客 284

Polymarket链上预测市场自动化交易代理开发实战指南

自动化交易代理是量化交易的核心工具,它通过预设的算法规则,自动执行市场分析、决策与下单操作,旨在提升交易效率与纪律性。其技术原理通常涉及实时数据获取、策略引擎计算、交易执行与风险管理等模块的协同工作。在区块链与DeFi领域,这类代理的价值尤为凸显,能够高效处理链上合约交互,捕捉去中心化市场的套利机会。具体到应用场景,链上预测市场如Polymarket,为自动化策略提供了丰富的博弈标的。本文以Polymarket交易代理项目为例,深入剖析其基于Node.js与ethers.js的技术栈实现,详解从环境配置、策

weixin_42533910的博客 581

实验四(作业一:字符串加密)

作业一:字串加密 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 请编写一个程序,使用上述算法加密或解密用户输入的英文字串要求设计思想、程序流程图、源代码、结果截图。 设计思想:先让用户输入“key”的值,然后让用户输入字符串,将字符串的单个字符的scaii值移动相应位置即可。 程序流程图: 源代码: public clas...

weixin_30648963的博客 437

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

介绍七种常见还危险的病毒(带样本)

简介:能够感染用户计算机bai系统中的.exe、.dll和.html文件,将自身加密以后缀加到目标文件中。样本(源文件):https://wwx.lanzoux.com/iJx4njrpz1c / https://wwx.lanzoui.com/iYRNLwd8ldc。英文名称:Virus.Win32.Viking.A(标准) / Worm.Win32.Fujack.A(标准)英文名称:Net-Worm.Win32.Blaster.A(标准)/ Lovesan.A/ Msblast.A。

2301_78858007的博客 8401

数据结构实践——字符串加密

本文针对数据结构基础系列网络课程(4):串实践项目。 【项目-字符串加密】   一个文本串可用事先编制好的字符映射表进行加密。例如,设字符映射表为: abcdefghijklmnopqrstuvwxyz ngzqtcobmuhelkpdawxfyivrsj    则字符串“lao he jiao shu ju jie gou...

weixin_33978016的博客 494

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

PCB模块化设计24——DCDC电源模块PCB布局布线设计规范

qq_31444421的博客 2万+

根据文本对输入的字符串进行加密解密操作

问题描述: 根据字母对应的文本,对输入的字符串进行加密解密操作 程序代码: #include #include #include #define MaxSize 100 using namespace std; typedef struct { char data[MaxSize]; int length; } SqString; SqString A,B; void

舒绾 6317

Redhawk:什么是timing window?

STA timing file中timing window的作用和计算方式

m0_61544122的博客 1万+

OpenCV实例(二)手势识别

手势识别的范围很广泛,在不同场景下,有不同类型的手势需要识别,例如:● 识别手势所表示的数值。● 识别手势在特定游戏中的含义,如“石头、剪刀、布”等。● 识别手势在游戏中表示的动作,如前进、跳跃、后退等。● 识别特定手势的含义,如表示“OK”的手势、表示胜利的手势等。理论基础凸包和凸缺陷在图像处理中具有非常重要的意义,被广泛地用于图像识别等领域。逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。凸包和逼近多边形很像,只不过凸包是物体最外层的凸多边形。

小幽余生不加糖 9410

第一章练习题——加密算法(字母循环,取往后的第四个)

要求是:对字母进行加密运算,加密规则是所有的字母循环向后取后面第四个字母,即:A->E、b->f、v->z、w->a、Z->D 一开始还没能运行通过: #include<iostream> using namespace std; int main(){ char c; while(c=getchar()!=...

weixin_33901843的博客 2972

168、OIS光学防抖系统设计:陀螺仪标定、音圈马达驱动与滚珠式/悬丝式结构选型

本文总结了OIS光学防抖系统设计中的关键问题与解决方案。作者通过实际案例指出,陀螺仪标定需重视零偏、灵敏度和温度补偿问题,音圈马达驱动需采用电流环控制并优化相位补偿。在机械结构选型方面,滚珠式适合大角度补偿但存在回差问题,悬丝式精度高但受重力影响,需根据应用场景选择。系统联调建议从开环到闭环逐步验证,注意陀螺仪与驱动频率匹配。最后给出5条经验建议:关注陀螺仪信噪比而非分辨率、预留标定余量、重视机械结构公差、配备专业调试工具、协调OIS与电子防抖的分工配合。文章强调OIS调试需针对不同模组特性进行反复测试与标

zzfmlxs的博客 46

第八周上机实践项目4-字符串加密

问题及代码: 测试函数:main.cpp,完成相关的测试工作; /* *Copyright(c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:test.cpp *作者:颜肖璇 *完成日期:2015年10月26日 *版本号:v1.0 /* *问题描述:一个文本串可用事先

yxxhilda的博客 503

电容式三点式振荡电路/电感式三点振荡电路基础知识及Multisim电路仿真

摘要:三极管振荡电路利用放大特性与正反馈实现自激振荡,需满足巴克豪森条件(增益≥1,相位匹配)。核心由放大级、反馈网络、选频网络和稳幅环节构成。主要分为三类:1)LC/RC正弦波振荡电路(如电容三点式、电感三点式),输出高频/低频正弦波;2)多谐振荡电路,通过电容充放电产生方波;3)张弛振荡电路,生成锯齿波等。设计需关注相位匹配、增益控制和元件适配。LC振荡频率由谐振参数决定,RC振荡由时间常数控制。稳幅机制通过非线性或主动元件维持等幅输出。该电路在信号发生、时钟源等领域有广泛应用。

XU157303764的博客 2037

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构上机实践第八周项目4-字符串加密

字符串加密 密码在我们的生活中很常见,现在的加密算法最常用的是MD5和SHA512散列式算法,最早的密码加密方式很简单,容易被破译,但是却引领信息安全的潮流,本次实践,将实现最早的字符串加密方式,采用映射表的方式,实现简单的加密算法。 本次所用到的顺序串算法库点击此处可参考,不再在本篇中展示。编译环境:Code::Blocks16.01 项目要求如下:设计一个程序,实现加密、解密算法

Moresweet 猫甜 387

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

第八周上机任务(加密)

/*   * Copyright (c) 2011, 烟台大学计算机学院   * All rights reserved.   * 文件名称:加密 * 作者:孙永  * 输入描述:无   * 问题描述:加密语句   * 完成日期:2012 年10月23日   * 版本号:v1.0   *   * 程序输出:被加密的语句   * 问题分析:略   * 算

gmsunyong的专栏 981

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

第八周上机任务5-字符加密

01./* 02.  * Copyright (c) 2012, 烟台大学计算机学院 03.  * All rights reserved. 04.  * 作 者: 赵冠哲 05.  * 完成日期:2012 年 10月 19 日 06.  * 版 本 号:v1.0 07.  *

zgz1992319的专栏 930

北航C语言上机8

400+第八波 //1 /* #include&lt;stdio.h&gt; int main(){ int c,isSpace=0; FILE *in,*out; in=fopen("data.txt","r"); out=fopen("output.txt","w"); while((c=fgetc(in))!=EOF){ if(c==' '||c=='\t'){ ...

我在浪里 413

北航c语言上机课作业答案,北航C语言上机8

400+第八波//1/*#includeint main(){int c,isSpace=0;FILE *in,*out;in=fopen("data.txt","r");out=fopen("output.txt","w");while((c=fgetc(in))!=EOF){if(c==' '||c=='\t'){if(isSpace==0){isSpace=1;fputc(' ',out);...

weixin_29057695的博客 253

第8周实验报告

实验目的 实验内容 源程序 // 以下是程序,请在需要的位置写入必要的注释 #include using namespace std; int main( ) { int i,k,n=6,m=6; i=1; while (i<=n) { k=m+1; while (k>=1*i+1) { cout<<'*'; k=k-1;

leihengxin的专栏 461

201711671133《Java程序设计》第8章学习总结

教材学习内容总结 构造string对象 (常量对象,string对象,引用string常量) 字符串的并置 string类的常用方法 字符串与基本数据的相互转化 对象的字符串表示 字符串与字符数组、字节数组 字符串的加密算法 正则表达式 字符串的替换 字符序列的分解 StringtoKenizer类 Scanner类 StringBuffer对象 StringBuff...

Vitamin_Grail的博客 205

c语言消隐的作用是什么,【C语言程序设计最终版材料】

C语言程序设计(最终版)《C语言程序设计.doc》由会员分享,可免费在线阅读全文,更多与《C语言程序设计(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、本要求.第一章引言(学时)学习问题的标准描述。了解设计个学习系统基本步骤。.第二章概念学习和一般到特殊序(学时)了解一般概念到特殊概念的演变过程。重点掌握几个搜索算法:如寻找极大特殊假设,变型空间和候选消除...

weixin_36372094的博客 629

C 程序设计(第五版) 书后题解(仅供参考)

文章目录第一章 程序设计和C语言1 概念2 特点3 理解含义4 Hello 程序5 特殊图案6 三者最大值7 省第二章 算法——程序的灵魂1 算法2 结构化的算法3 三种基本结构4 传统流程图5 N-S图6 伪代码7 结构化程序设计8 自顶向下第三章 顺序程序设计1 简单公式计算年利率2 不同存款方式的利息3 贷款买房4 超存储界限,发生阶段5 输入问题6 简单加密输出7 圆 球相关计算8 字符第四章 选择结构1 运算概念2 真假表示3 逻辑表达式的值4 三者最大5 按整求平方根6 分段函数

随便写写 3140

BUAA(2021春)通讯录整理——结构体一级排序

BUAA数据结构第二次编程题——通讯录整理看前须知题目内容问题描述输入形式输出形式样例样例说明题解易错点和难点参考代码补充测试的数据推荐题单 看前须知 要点介绍和简要声明. 题目内容 问题描述 读取一组电话号码簿(由姓名和手机号码组成),将重复出现的项删除(姓名和电话号码都相同的项为重复项,只保留第一次出现的项),并对姓名相同手机号码不同的项进行如下整理:首次出现的项不作处理,第一次重复的姓名后面加英文下划线字符_和数字1,第二次重复的姓名后面加英文下划线字符_和数字2,依次类推。号码簿中姓名相同的项数最多

zhouEnshen的博客 2228

【课程设计】SpringBoot线上课程学习过程管理系统的设计与实现 计算机毕业设计源码66441

基于SpringBoot框架的线上课程学习过程管理系统。该系统涵盖学生用户、教师用户和管理员三个主要角色,每个角色根据权限不同拥有相应的功能模块。学生用户可以查看课程信息、参与考试、制定学习计划、记录错题并管理个人账户;教师用户则可管理课程信息、跟踪学生学习进度、创建考试试题、记录错题等;管理员负责系统用户管理、课程管理、通知公告发布以及资源管理等。系统基于SpringBoot技术架构,前端采用Vue.js框架,数据存储使用MySQL数据库。通过对课程管理和学习进度的有效监控与管理,系统提高了....

Biye_Design的博客 1006
上一篇: 第八周上机实践—项目3—顺序串算法
下一篇: 第八周上机实践—项目5—计数的模式匹配
Zero_LinLi
博客等级 码龄11年 15粉丝 75原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值