实施蛮力的局限性

问题描述

我写了一个应该破解三位数数字密码的代码。如果密码小于或等于888,则此代码似乎有效。如果密码大于888,则代码显示以下输出

[RPC_PATH]

我想知道此限制的原因以及此问题的解决方案。预先感谢。

Unable to crack password..

解决方法

问题在于,在for循环中,数字57代表字符“ 9”,但是您添加的字符严格小于,表示您不会使用字符“ 9”,一个简单的解决方法是仅添加

#include <stdio.h>
#include <string.h>

int main()
{
    char pswd[5];
    char brute[4];
    char crack[4];

    printf("Program to crack a 3 digit numeric password\n ");
    printf("Enter password: ");
    scanf("%s",pswd);
    int i,j,k;
    int flag = 1;

    for(i = '0'; i <= '9'; ++i)
    {
        for(j = '0'; j <= '9'; ++j)
        {
            for(k = '0'; k <= '9'; ++k)
            {
                crack[0] = i;
                crack[1] = j;
                crack[2] = k;
                crack[3] = 0;
                if(strcmp(crack,pswd) == 0)
                {
                    flag = 0;
                    break;
                }
            }
            if(flag == 0) break;
        }
        if(flag == 0) break;
    }
    flag == 0 ? printf("Password cracked successfully.\
Your password is %s",crack) : printf("Unable to crack password..");

    return 0;

}

您也可以将其更改为适用于3位以上的数字,这是我不使用数组的方法:

#include <stdio.h>

int main()
{
    int pswd,brute = 0;

    printf("Program to crack a positive password\n ");
    do
    {
        printf("Enter password: ");
        scanf("%d",&pswd);
    } while(pswd<0);

    while(brute != pswd)
        brute++;
    printf("The password is %d",brute);
    getchar();
    return 0;
}