一个算法来检查密码的强度在c/c++



我试图做一个算法来检查一个字符串是否有上,下和一个数字在它,如果它有它应该打印"强密码",如果不是"弱密码"。但它似乎不起作用。

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的答案如何做到这一点(他张贴,而我正在打字,谢谢;-))。

相关内容

  • 没有找到相关文章

最新更新