c ++哈希函数对密码是否合理安全?

时间:2013-06-01 22:40:30

标签: c++ security hash passwords

c ++中的内置哈希函数对于散列密码是否相当安全?例如下面的内容。

#include <iostream>
#import <string>

int main ()
{
    std::hash <std::string> hash;

    std::string passwordGuess;
    unsigned long hashedPassword = 1065148159544519853; // hash of password

    std::cout << "Enter your password: ";
    std::cin >> passwordGuess;

    unsigned long hashedPasswordGuess = hash(passwordGuess);


    if (hashedPasswordGuess  == hashedPassword) {
        std::cout << "Password is correct!" << std::endl;
    } else {
        std::cout << "Password is wrong!" << std::endl;
    }
}

这是否合理安全?

2 个答案:

答案 0 :(得分:15)

远远没有合理安全,因为此哈希函数不打算用于加密目的

实际上,即使用于加密目的的打算的哈希函数(例如现在已损坏的MD5,旧的SHA1,甚至是新的SHA3)也不适用于散列存储密码;这是因为它们被设计为快速,而对于密码安全性,您需要设计为的哈希值,以便在哈希值泄露时限制损坏。

如果您打算哈希密码,您应该查找bcryptPBKDF2的C ++(或C,因为它们可能更容易找到);我知道Crypto++至少会影响后者。

有关散列密码的详细分析,另请参阅how to securely hash passwords

答案 1 :(得分:1)

当人们谈论散列密码时,它不在散列表的意义上。密码哈希应该是单向函数。像SHA1这样的加密哈希就是你想要使用的。

有很多技术可以正确散列。您需要包含一个盐来防止字典攻击。并且你想要多次(4k到16k)哈希。