网络与信息安全实验一 恶意代码特征提取.docx
- 文档编号:5324575
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:9
- 大小:100.59KB
网络与信息安全实验一 恶意代码特征提取.docx
《网络与信息安全实验一 恶意代码特征提取.docx》由会员分享,可在线阅读,更多相关《网络与信息安全实验一 恶意代码特征提取.docx(9页珍藏版)》请在冰豆网上搜索。
网络与信息安全实验一恶意代码特征提取
网络与信息安全实验报告
(2015年度秋季学期)
网络与信息安全
实验一恶意代码特征提取
一、实验内容
实验项目描述:
面向网络恶意代码的特征提取
1、理解基于最长公共子序的协议特征提取方法
(1)掌握网络恶意代码特征的提取流程
(2)学习最长公共子序列的提取算法
2、实现字符串最长公共子序列的提取算法
依据输入的字符串构建L(m,n)数组,利用L(m,n)数组查找两个字符串之间的最长公共子序列。
实验要求:
1、实验数据准备。
利用ASCII字符集做为输入集,不考虑多字节编码的中文、英文字符集。
2、程序的输入部分:
2个字符串。
输出部分:
这2个字符串的最长公共子序列,如有多个一同给出。
3、实验结果和实验数据一起给出。
二、实验设计
算法分析:
1、最长公共子序列的结构
最长公共子序列的结构有如下表示:
设序列X=
1.若xm=yn,则zk=xm=yn且Zk-1是Xm-1和Yn-1的最长公共子序列;
2.若xm≠yn且zk≠xm,则Z是Xm-1和Y的最长公共子序列;
3.若xm≠yn且zk≠yn ,则Z是X和Yn-1的最长公共子序列。
其中Xm-1=
2、子问题的递归结构
由最长公共子序列问题的最优子结构性质可知,要找出X=
当xm=yn时,找出Xm-1和Yn-1的最长公共子序列,然后在其尾部加上xm(=yn)即可得X和Y的一个最长公共子序列。
当xm≠yn时,必须解两个子问题,即找出Xm-1和Y的一个最长公共子序列及X和Yn-1的一个最长公共子序列。
这两个公共子序列中较长者即为X和Y的一个最长公共子序列。
由此递归结构容易看到最长公共子序列问题具有子问题重叠性质。
例如,在计算X和Y的最长公共子序列时,可能要计算出X和Yn-1及Xm-1和Y的最长公共子序列。
而这两个子问题都包含一个公共子问题,即计算Xm-1和Yn-1的最长公共子序列。
3、计算最优值
直接利用上节节末的递归式,我们将很容易就能写出一个计算c[i,j]的递归算法,但其计算时间是随输入长度指数增长的。
由于在所考虑的子问题空间中,总共只有θ(m*n)个不同的子问题,因此,用动态规划算法自底向上地计算最优值能提高算法的效率。
计算最长公共子序列长度的动态规划算法LCS_LENGTH(X,Y)以序列X=
输出两个数组c[0..m,0..n]和b[1..m,1..n]。
其中c[i,j]存储Xi与Yj的最长公共子序列的长度,b[i,j]记录指示c[i,j]的值是由哪一个子问题的解达到的,这在构造最长公共子序列时要用到。
最后,X和Y的最长公共子序列的长度记录于c[m,n]中。
流程图:
数据结构:
数据结构主要是用二维数组存放子序列,通过set存放可能存在的多个最长公共子序列
主要代码:
1、求出所有的最长公共子序列,并放入set中
3、构造表,并返回x和y的LCS的长度
三、实验结果
stringX=“BDCABA”
stringy=”ABCBDAB”
运行结果如下:
stringX=“BDCA3fg45gh”
stringy=”DB23fsd5gfsf”
运行结果如下:
stringX=“cvhiuasevhishud”
stringy=”vnkiseocniseuhf”
运行结果如下:
五、遇到的困难及解决方法、心得体会
面向网络恶意代码的特征提取主要是通过求字符串的最长公共子序列的方法实现,而最长公共子序列的实现,主要是动态规划算法,分析后可以写出动态规划递推方程,便可以实现算法。
复习了之前学习的LCS算法,并对恶意代码的特征提取,对于检测恶意代码有很重要的作用
附件:
源代码
#include
#include
#include
#include
#include
usingnamespacestd;
stringX="cvhiuasevhishud";
stringY="vnkiseocniseuhf";
vector
set
intmax(inta,intb)
{
return(a>b)?
a:
b;
}
/**
*字符串逆序
*/
stringReverse(stringstr)
{
intlow=0;
inthigh=str.length()-1;
while(low { chartemp=str[low]; str[low]=str[high]; str[high]=temp; ++low; --high; } returnstr; } /** *构造表,并返回X和Y的LCS的长度 */ intlcs(intm,intn) { //表的大小为(m+1)*(n+1) table=vector for(inti=0;i { for(intj=0;j { //第一行和第一列置0 if(i==0||j==0) table[i][j]=0; elseif(X[i-1]==Y[j-1]) table[i][j]=table[i-1][j-1]+1; else table[i][j]=max(table[i-1][j],table[i][j-1]); } } returntable[m][n]; } /** *求出所有的最长公共子序列,并放入set中 */ voidtraceBack(inti,intj,stringlcs_str) { while(i>0&&j>0) { if(X[i-1]==Y[j-1]) { lcs_str.push_back(X[i-1]); --i; --j; } else { if(table[i-1][j]>table[i][j-1]) --i; elseif(table[i-1][j] --j; else//相等的情况 { traceBack(i-1,j,lcs_str); traceBack(i,j-1,lcs_str); return; } } } setOfLCS.insert(Reverse(lcs_str)); } intmain() { intm=X.length(); intn=Y.length(); intlength=lcs(m,n); cout<<"ThelengthofLCSis"< stringstr; traceBack(m,n,str); //倒序输出 set : iteratorbeg=setOfLCS.begin(); for(;beg! =setOfLCS.end();++beg) cout<<*beg< getchar(); return0; } 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1