मैंने एक कोड लिखा है जो तीन अंकों के संख्यात्मक पासवर्ड को क्रैक करने वाला है। यदि पासवर्ड 888 या उससे कम है तो यह कोड काम करता प्रतीत होता है। यदि पासवर्ड 888 से अधिक है, तो कोड निम्न आउटपुट दिखाता है:

Unable to crack password..

मैं इस सीमा के पीछे का कारण और इस समस्या का समाधान जानना चाहता हूं। अग्रिम में धन्यवाद।

#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 = 48; i < 57; ++i)
    {
        for(j = 48; j < 57; ++j)
        {
            for(k = 48; k < 57; ++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;

}
0
Pranjal Basak 23 अगस्त 2020, 09:53

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है कि आपके फॉर-लूप में, संख्या 57 वर्ण '9' का प्रतिनिधित्व करती है, लेकिन आपने अर्थ से सख्ती से कम जोड़ा है, आप '9' वर्ण नहीं लेंगे, एक साधारण फिक्स केवल <='9' जोड़ना होगा। या <=57, तो आपका कोड इस तरह दिखेगा:

#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;
}
2
aliberro 23 अगस्त 2020, 09:12