当前位置:C++技术网 > 资讯 > 电影中暴力破解密码模拟:逐个密码位确定的暴力密码破解模拟程序

电影中暴力破解密码模拟:逐个密码位确定的暴力密码破解模拟程序

更新时间:2015-10-06 17:25:49浏览次数:1+次

    其实对这个方式的密码破解,我也是想不通哪里的系统会用到。不过在电影中倒是经常出现。
    电影的场景就是在紧张的情况下,主角用笔记本连接到系统,然后出现刷密码的界面,然后滚动密码,然后看到从左到右,密码一个个被确定,最后到完全匹配正确。这个破解原理,我至今都没有弄明白。
    这种破解,只要限制尝试的次数,就可以防止。难不成主角早已把这个限制解除了吗?我没有留意到。逐个密码位确定,这样的设计是不是弱爆了。如果你清楚这个机制,请告诉我一下吧。交流学习一下。
    不过,这里只是为了娱乐,演示了一把,满足一下好奇心而已,似乎对于现有的系统没有什么实际用途。
    程序的运行截图如下:
   
    由上图可以看出,这是在一个个的确定,从《暴力破解密码模拟程序,模拟暴力破译密码实现程序代码》文章我们可以知晓,这相当于把密码长度减少到了1位,然后多了很多个密码要破解。这还不是弱爆了。所以对于电影这个细节,真不知道怎么理解。在整体密码没有确定之前,你是没法保证一个位的密码数字就固定了的。或者电影中程序采取的算法是什么,可以做到这样的效果,不过我不解。算了,不纠结这个了。下面来看看代码吧:

#include <iostream>
#include <string.h>
#include <stdlib.h>
void main()
{
    using namespace std;
    cout<<"请输入您的密码: ";
    char psw[100];
    cin.get(psw,100);
    int len = strlen(psw);
    char * ppsw = new char[len+1];
    for(int n=0;n<len+1;n++)
        ppsw[n]=0;
    cout<<"<<<逐个匹配>>>:\n";
    for(int i=0;i<len;i++)//最后一个空字符不用匹配
    {
        cout<<"破解进行中...匹配>>";
        for(int j=32;j<127;j++)
        {
            for(int m=0;m<5000000;m++);
            cout<<(char)j<<"\b";
            if(psw[i] == j)
            {
                ppsw[i]=j;
                cout<<"\n密码第 "<<i+1<<" 个字符为: "<<(char)j<<endl;
                break;
            }
        }
    }
    cout<<"\n破解成功!\n";
    cout<<"你的密码是:"<<ppsw<<endl;
    system("pause");
}


    这里的算法就简单了,就不细说了。你如果不清楚,就花点时间来阅读吧。