求大神帮忙解决一道matlab编程题!是关于密码的,急求!谢谢!求帮助

网上银行通用的一种加密方法是向用户询问密码中的三位随机字符。例如,如果密码是531278,那么银行可以询问第2,3,5位字符,预期的回复应该是317。文本文件keylog... 网上银行通用的一种加密方法是向用户询问密码中的三位随机字符。例如,如果密码是531278,那么银行可以询问第2,3,5位字符,预期的回复应该是317。
文本文件 keylog.txt包含50次成功的登录尝试。
已知三位字符总是按顺序询问,分析文件并找出可能的最短的密码(长度未知)。
文本文件keylog.txt如下:
319
680
180
690
129
620
762
689
762
318
368
710
720
710
629
168
160
689
716
731
736
729
316
729
729
710
769
290
719
680
318
389
162
289
162
718
729
319
790
680
890
362
319
760
316
729
380
319
728
716
展开
 我来答
dukinkin
2014-06-26 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:872万
展开全部

乍一看,好像很难,其实实际情况不可能有这么脆弱的密码系统

也不可能让你试出50次登录。

不过从50个尝试来看,其是来来去去最多就只有8个数字

而本着最简单的原则,认为密码最短,没有重复的数字,那么还是有可能解密的


由于随机提起三个密码还要是按顺序的,所以50次每次的登录都为我们提供密码顺序的信息


具体思路,按照密码每个数字出现的顺序,我们可以建立一个有向图

每次三个数字都提供了图中三个节点和两条变的信息

其实还有写数据是重复的,可以减少数据量

最后,如果形成一个连通的有向无环图

从图中找到的覆盖所有点最长路径就是我们密码的顺序了


根据让面的分析,用node储存节点信息,用map储存邻接矩阵

根据登录的50个数据,可以构造出这个有向无环图


利用matlab的biograph我划出了这个图,并从中解出密码7316289


a=[319;680;180;690;129;620;762;689;762;318;368;710;...

    720;710;629;168;160;689;716;731;736;729;316;729;...

    729;710;769;290;719;680;318;389;162;289;162;718;...

    729;319;790;680;890;362;319;760;316;729;380;319;...

    728;716];

b=num2str(a);

node=[]; %节点

map=[];  %邻接矩阵图

for ii=1:size(b,1)

    temp=b(ii,:);

    for jj=1:3    %加节点

        if isempty(find(node==temp(jj),1))

            node=[node, temp(jj)];

            siz=length(node);

            map(siz,siz)=0;

        end

    end

    map(node==temp(1),node==temp(2))=1; %连线

    map(node==temp(2),node==temp(3))=1;          

end


bg = biograph(map,node);

view(bg);




暂时先写到这,以上是肉眼寻找的路径,程序的代码有时间再慢慢写

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式