如何在mysql中创建带有密码字段的表?

如何在mysql中创建带有密码字段的表?,mysql,Mysql,我是否应该将password列创建为常规的varchar,然后像这样插入: sha1($pass_string) 或者我应该在创建表时做一些额外的事情来确保密码字段是安全的吗 谢谢 这是一个普通的varchar字段(40个字符),但如果您想将其设置得更安全,应该使用salt 更新: 警告:不含盐的哈希密码非常弱!你不应该使用它 密码加密是一种很好的方法: 根据pst的建议: 使用SHA-1和salt是更幼稚但相当安全的方法 使用: 这是一种更安全的方法:)因为它使用速度来提高安全性,b

我是否应该将password列创建为常规的varchar,然后像这样插入:

sha1($pass_string)
或者我应该在创建表时做一些额外的事情来确保密码字段是安全的吗


谢谢

这是一个普通的varchar字段(40个字符),但如果您想将其设置得更安全,应该使用salt

更新:

警告:不含盐的哈希密码非常弱!你不应该使用它

密码加密是一种很好的方法:

根据pst的建议:

  • 使用SHA-1和salt是更幼稚但相当安全的方法

  • 使用:

这是一种更安全的方法:)因为它使用速度来提高安全性,bfish是围绕加密方法blowfish构建的哈希函数。(似乎也有两条鱼,应该是“现代”版的河豚)

  • 使用:

这是一个使用SHA-1链的版本,所以它是一个中间解决方案,但允许根据您的需要设置速度。事实上,速度会削弱您的安全性。

大多数人会按照您的建议保存哈希。它足够安全和简单,是一个很好的选择


请注意,所有哈希最终都会被破解,因此任何哈希都比没有好,而且SHA足够强大。

您还可以使用mysql中内置的AES_ENCRYPT()函数来提高安全性。


这里还有一个很好的说明:

包含了一个很好的说明,说明了要使用哪种类型的列。

这比那更糟糕——没有盐,一个微不足道的彩虹表攻击将很容易破坏它。此外,单个SHA不太适合用于密码,因为它可以非常快速地计算。(
bcrypt
和HMAC可以帮助解决这个问题。)HMAC对小于一个数据块的数据有用吗?@ykatchou,注释有点不正确。不是为了“帮助”提高速度而设计的,但它能做的是使用服务器密钥添加另一个级别的强化。@pst:多亏了你,我发现了有助于提高速度的bcrypt:)!还应使用不同的(“计算成本更高”)函数,如
bcrypt
和/或使用HMAC-hash。是的,一定要对哈希进行盐分。此外,如果您为每个用户使用不同的salt,则有助于防止彩虹表攻击:@pst:您能提供更多详细信息吗?:)@ykatchou(公认答案的底部)和——这并不是说SHA不是一个安全的散列,只是一个简单的调用太快了。由于
bcrypt
已经为此设计,我认为没有必要“滚动另一个”(除非您正在设计新的算法/方法)。