2013-04-15 193 views
0

我是一个初学者,但我一直在努力学习如何使用Zend Framework 2.我使用从公共回购克隆的模块来验证用户。它采用MD5,像这样:Zend Framework 2的身份验证使用加密和盐

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

但是,首先想我用比MD5以外的东西(如SHA-2?),因为我已经多次读到,MD5不安全了,我也想用盐值。我想为每个用户生成一个随机salt值,并将其存储在其表列中的单独列中,并将其密码存储为散列salt +密码。这部分不应该是一个问题。

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

回答

2

我建议你做两件事情:

  • 添加另一列到你的用户表,称为盐或类似的东西。当用户注册时,创建一个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