Zend Framework 2's认证使用加密和盐


Using encryption and salt with Zend Framework 2's Authentication

我是一个初学者,但我一直在努力学习使用Zend框架2。我正在使用从公共仓库克隆的模块来验证用户。它使用MD5,如下所示:

$dbAdapter      = $sm->get('Zend'Db'Adapter'Adapter');
$dbAuthAdapter  = new DbAuthAdapter($dbAdapter, 'user','username','password', 'MD5(?)');

然而,首先我想使用MD5以外的东西(比如SHA-2?),因为我在几个场合读到MD5不再安全,我也想使用盐值。我想为每个用户生成一个随机的盐值,并将其存储在他们的表行中单独的列中,并将他们的密码存储为散列盐+密码。那部分应该不成问题。

我遇到的问题是如何使用我在模块中设置的适配器来验证它。我想从数据库中获取盐值,将其添加到用户通过登录表单给出的密码前,对其进行加密,并将其与存储的密码进行比较。如何从数据库中获取用户的盐值?我如何使用不同的加密代替MD5?

我建议你做几件事:

  • 在用户表中添加另一列,称为salt或类似的列。当用户注册时,创建一个salt并将其存储到此列中。
  • 在配置文件中为您的站点存储静态盐。
  • 当用户注册时,使用散列函数(如果你喜欢sha2)并将密码,静态盐和自定义盐连接到一个字符串中进行散列。
  • 存储哈希值,并确保在登录时使用相同的方法检查密码

更多信息:http://framework.zend.com/manual/2.0/en/modules/zend.crypt.key.derivation.html

文档也提示了这个实现:http://framework.zend.com/manual/2.1/en/modules/zend.authentication.adapter.dbtable.html