在开源项目中存储密码

时间:2010-11-18 01:16:32

标签: security passwords salt

我准备将一个项目公开放在github上。在我的项目中,对于登录验证,我接受一个字符串并强烈地将其键入为Password

// Stripped down here on SO for brevity
public class Password
{
    private const string salt = "sealab2021";

    public Password(string password) 
    {
        this.saltedPasswordHash = new MD5Hash(password + this.salt).ToString();
    }

    public string SaltedHash { get; private set; }
}

显然,如果盐是公众可见的,那盐就没有价值了。

其他人如何在开源项目中加密密码,并且仍然可以安全地隐藏盐语?

盐是否存在于文件系统的某个位置并在应用程序启动时加载?看起来像是一个合理的解决方案,但如果我要实际使用github进行源代码控制,而不是仅在新版本发布时对github执行转储,那么该文件仍然可供公众访问。

2 个答案:

答案 0 :(得分:5)

  

显然,如果盐是   可公开观看,盐   毫无价值的。

不正确。您应该假设攻击者可能知道salt ,而不是依赖于安全性。

您的错误在于您在整个系统中使用单个共享盐。您应该为每个用户使用单独的伪随机盐,然后使用该用户的密码哈希值存储该盐。

我还建议使用像PBKDF2bcrypt这样的系统,而不是简单的盐渍哈希。

答案 1 :(得分:4)