密码存储?
好的,我对如何制作安全的登录系统有非常基本的了解。密码存储?
如果您尝试登录,你会得到尝试的密码哈希它例如MD5,尝试匹配与存储在某种数据库/服务器的密码哈希密码(也散列)。
登记时它存储在服务器上的MD5哈希值,而不是原来的。所以即使被破坏,也是无法追踪的。 (即使存在具有哈希数据库的服务,并且可以尝试反向)。
我的问题是:如何存储哈希?如果我使用了一个mysql数据库,那么它的内部代码就会被硬编码,而且我不用php编写代码,所以不能真正在网上编写代码。
我怎么会藏在我的软件MySQL的凭据?
不要生成自己的盐。
研究PHP password_hash
和password_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.
}
这一切你需要的。你不需要,实际上不应该存储用于散列的任何盐。
@RyanVincent标准方式散列工作,据我所知,散列盐存储在完整的散列本身。与加密不同。 – Martin
你应该加入盐,以你的哈希太... – SJB
MHM是的。关于我问了什么的任何想法? – JustRayz
也许有帮助? [使用PHP 5.5的'password_hash()'和验证函数,我做对了吗?](http://*.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版本。请将此用于密码散列需求。它被尝试和测试。 –