0

我是一个初学者,但我一直在尝试学习使用 Zend Framework 2。我正在使用从公共存储库克隆的模块来验证用户。它使用 MD5,如下所示:

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

但是,首先我想使用 MD5 以外的东西(比如 SHA-2?),因为我多次读到 MD5 不再安全,而且我还想使用盐值. 我想为每个用户生成一个随机盐值并将其存储在他们的表行中的单独列中,并将他们的密码存储为哈希盐 + 密码。那部分应该没有问题。

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

4

1 回答 1

2

我建议你做几件事:

  • 在您的用户表中添加另一列,称为 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

于 2013-04-15T14:05:54.977 回答