我试图做一个算法来检查一个字符串是否有上,下和一个数字在它,如果它有它应该打印"强密码",如果不是"弱密码"。但它似乎不起作用。
int main()
{
int i = 0;
char string1[100];
printf("Please enter passwordn");
gets(string1);
if(strlen(stirng1) < 6)
{
printf("Password is too shortn");
}
if(islower(string1[i]) && isupper(string1[i]) && isdigit(string1[i]))
{
printf("Strong Passwordn");
}
else
{
printf("Weak Passwordn");
}
return 0;
}
bool hasUpper = false;
bool hasLower = false;
bool hasDigit = false;
for(int i =0; i < strlen(string1); ++i)
{
if( islower(string1[i]) )
hasLower = true;
if( isupper(string1[i]) )
hasUpper = true;
if( isdigit(string1[i]) )
hasDigit = true;
}
if(hasLower && hasUpper && hasDigit)
{
printf("Strong Passwordn");
}
else
{
printf("Weak Passwordn");
}
请注意,虽然警告用户使用弱密码或短密码是件好事,但你永远不应该把它作为一项要求。通过排除太多密码,实际上会使攻击者更容易进行暴力破解,因为他可以跳过这些密码。此外,密码太难记住是不安全的,因为用户将被迫写下它并发布到监视器。另一件事是确保您可以正确处理所有字符,如空格,制表符,"
或/
。如果用户想要" DROP TABLE 'users';
,你的工作是正确处理它。
密码强度是用户的责任,因为只有用户知道他是否会在您的系统中保存有价值的东西。
if语句
if(islower(string1[i]) && isupper(string1[i]) && isdigit(string1[i]))
{
printf("Strong Passwordn");
}
永远不会为真,因为i
是0(仍然来自初始化),string1
的第一个字符不能是小写和大写和数字。您可能需要一个循环,检查密码中是否至少有一个大写字母、一个小写字母和一个数字。参见Agent_L
的答案如何做到这一点(他张贴,而我正在打字,谢谢;-))。