2015-11-06 125 views
0

好的,我对如何制作安全的登录系统有非常基本的了解。密码存储?

如果您尝试登录,你会得到尝试的密码哈希它例如MD5,尝试匹配与存储在某种数据库/服务器的密码哈希密码(也散列)。

登记时它存储在服务器上的MD5哈希值,而不是原来的。所以即使被破坏,也是无法追踪的。 (即使存在具有哈希数据库的服务,并且可以尝试反向)。

我的问题是:如何存储哈希?如果我使用了一个mysql数据库,那么它的内部代码就会被硬编码,而且我不用php编写代码,所以不能真正在网上编写代码。

我怎么会藏在我的软件MySQL的凭据?

+1

你应该加入盐,以你的哈希太... – SJB

+0

MHM是的。关于我问了什么的任何想法? – JustRayz

+1

也许有帮助? [使用PHP 5.5的'password_hash()'和验证函数,我做对了吗?](http://stackoverflow.com/questions/14992367/using-php-5-5s-password-hash-and-verify - 功能-AM-I-做,它右)。还有:[使用PHP 5.5密码散列API哈希密码](http://www.sitepoint.com/hashing-passwords-php-5-5-password-hashing-api/)。有一个兼容库可用于早期的PHP版本。请将此用于密码散列需求。它被尝试和测试。 –

回答

1

不要生成自己的盐。

研究PHP password_hashpassword_verify功能,几乎可以满足您的所有要求,自动且相当安全地使用PHP 5.5+。

http://php.net/manual/en/function.password-hash.php

而且

http://php.net/manual/en/faq.passwords.php

你也可以在PHP 5.3与IRCMaxwell取得了良好的修复使用。这里:https://github.com/ircmaxell/password_compat

MD5已经严重受损,并且有各种各样的彩虹表和碰撞函数可以找出MD5哈希字符串最初是什么(可以选择一些选项,它们是计算的花生)。做不是使用MD5散列私人数据。

“如何散列存储”通过存储哈希我想你的意思是你想存储:

$hash = md5($password_plaintext'); 

如果是这样,那么你可以存储这个在MySQL VARCHAR字段,在记录中,通常人们使用用户名密码提交登录信息,以便用户名用于MySQL引擎查找该行,然后比较密码哈希以查看它们是否匹配。

使用password_hash(),你会看的用户名,然后检索相关的密码哈希字段值(只是值),然后与明文密码从形式比较散:

if(password_verify($posted_login_password_plaintext, $hashfromDatabase)){ 
//if TRUEPassword matches. 
} 

这一切你需要的。你不需要,实际上不应该存储用于散列的任何盐。

+0

@RyanVincent标准方式散列工作,据我所知,散列盐存储在完整的散列本身。与加密不同。 – Martin