相关疑难解决方法(0)

为PHP密码保护哈希和盐

目前据说MD5部分不安全.考虑到这一点,我想知道用于密码保护的机制.

这个问题,"双重哈希"密码是否比仅仅哈希一次更安全? 建议多次散列可能是一个好主意,而如何实现单个文件的密码保护?建议使用盐.

我正在使用PHP.我想要一个安全快速的密码加密系统.散列密码一百万次可能更安全,但也更慢.如何在速度和安全性之间取得良好的平衡?另外,我更喜欢结果具有恒定数量的字符.

  1. 散列机制必须在PHP中可用
  2. 它必须是安全的
  3. 它可以使用盐(在这种情况下,所有的盐都同样好吗?有没有办法产生好的盐?)

另外,我应该在数据库中存储两个字段(例如,一个使用MD5,另一个使用SHA)?它会使它更安全或更不安全吗?

如果我不够清楚,我想知道使用哪种散列函数以及如何选择好的盐以便拥有安全和快速的密码保护机制.

相关问题并不完全涵盖我的问题:

PHP中的SHA和MD5有什么区别
简单密码加密
存储密钥的安全方法,asp.net的密码
如何在Tomcat 5.5中实现salted密码

php security passwords hash protection

1142
推荐指数
13
解决办法
21万
查看次数

为什么不使用MD5进行密码散列?

我有一个白帽子黑客的朋友.他说md5并不是那么糟糕,实际上它确实非常安全,只要我们正确使用它.

我相信他是对的.据我所知,有三种方法可以打破哈希:

  1. 使用彩虹桌(可以用长/随机盐保护)
  2. 碰撞(可通过多种盐或哈希来防止 - 如下例所示)
  3. 生成时间(如果我们为每个用户使用足够长的盐值,那么这一点并不重要 - AFAIK)

我和我的朋友认为Blowfish并不是真的有需要,也可能是有害的,因为它可以减慢密码验证过程,并且它可以与DDOS攻击一起使用,即使使用较少的资源,也可以分解服务器.

所以,我想确保遵循算法真的安全吗?并且,是否有真正的理由选择Blowfish哈希算法?

// return a 256 bit salt + 128 bit md5 binary hash value
function hash(password, salt=null)
{
    salt = (salt != null) ? salt : Random256BitBinaryValueGenerator();
    // What about using another user-specified parameter, like email address as salt?

    return salt + md5(salt + password) + md5(password + salt);

    // Or just use a non-cryptographic hash algorithm like crc32 to prevent collisions:
    // return salt + md5(salt + password) + …
Run Code Online (Sandbox Code Playgroud)

security passwords hash md5 password-storage

3
推荐指数
2
解决办法
1万
查看次数

标签 统计

hash ×2

passwords ×2

security ×2

md5 ×1

password-storage ×1

php ×1

protection ×1