c - C/C++ 中检查密码强度的算法

标签 c passwords

我尝试制定一种算法来检查字符串中是否有大写、小写和数字,如果有,则应打印“强密码”,如果不是“弱密码”。但似乎不起作用。

int main() 
{
    int i = 0;
    char string1[100];

    printf("Please enter password\n");
    gets(string1);

    if(strlen(stirng1) < 6)
    {
        printf("Password is too short\n");
    }
    if(islower(string1[i]) && isupper(string1[i]) && isdigit(string1[i]))
    {
        printf("Strong Password\n");
    }
    else
    { 
        printf("Weak Password\n");
    }   
    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 Password\n");
}
else
{ 
    printf("Weak Password\n");
}  

请注意,虽然警告用户有关弱密码或短密码的做法很好,但切勿将其作为一项要求。通过排除太多密码,实际上会让攻击者更容易进行暴力破解,因为他可以跳过这一点。此外,太难记住的密码也是不安全的,因为用户将被迫将其写下来并将其发布到监视器上。另一件事是确保您可以正确处理所有字符,例如空格、制表符、"/。如果用户想要 "DROP TABLE 'users'; 你的工作就是正确处理它。

密码强度是用户的责任,因为只有用户知道他是否会在您的系统中保留任何有值(value)的内容。

关于c - C/C++ 中检查密码强度的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14277378/

相关文章:

java - 如何在 Android 上安全地存储密码?

Jquery输入类型切换功能

oauth - 使用 LinkedIn 和 Oath 强制重新授权

windows - 什么是base64明文用户名和密码?

c - 在 C 中处理多维数组的列

c - 关于C中循环语法的问题

c - 用 C 打印二维数组

c++ - 使用宏和 C 样式字符串混合 C/C++

c - 位移是否取决于字节顺序?

mysql - fedora 上 mariadb 的默认密码是多少?