问题描述
我写了一个应该破解三位数数字密码的代码。如果密码小于或等于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;
}