Php Symfony2:如何生成密码的sha512哈希?

Php Symfony2:如何生成密码的sha512哈希?,php,hash,symfony,fosuserbundle,sha512,Php,Hash,Symfony,Fosuserbundle,Sha512,我需要比较用户输入的密码是否有效。如何获取sha512加密。我还在我的项目中使用FOSUserBundle。如果您确定需要的是SHA512,请尝试。在您的控制器中,您可以这样做(假设您在app/config/security.yml中将SHA512设置为编码算法) Symfony有几种不同的方式来存储密码。散列和检查密码的逻辑存储在以下几个部分: 在键encoder下使用哪一个。如果上面写的是sha512,则您正在使用MessageDigestPasswordEncoder 对于不同

我需要比较用户输入的密码是否有效。如何获取sha512加密。我还在我的项目中使用FOSUserBundle。

如果您确定需要的是SHA512,请尝试。

在您的控制器中,您可以这样做(假设您在
app/config/security.yml中将SHA512设置为编码算法)


Symfony有几种不同的方式来存储密码。散列和检查密码的逻辑存储在以下几个部分:

在键
encoder
下使用哪一个。如果上面写的是
sha512
,则您正在使用
MessageDigestPasswordEncoder

对于不同的用户类型,编码器类型可以不同。要为用户获取正确的编码器,可以询问。这已经在中为您完成了:您将用户和普通密码传递给
UserPasswordEncoder->isPasswordValid
,它将使用属于此用户的正确编码器检查密码。这是检查用户密码的最简单界面

如果您真的想知道SHA512散列是如何工作的,可以查看。它以类似“password{salt}”的字符串形式存在。它计算这个的散列。这是为了使密码散列速度变慢,因此不容易使用暴力


检查密码是否有效时。这是一个固定时间比较,可防止对密码哈希的定时攻击。

请查看我的。嘿,感谢您提供此链接。太棒了。作为一个变体,您可以获得编码器的实例并使用它的编码方法。看看这个答案中的编码器类,仅仅使用散列函数是不够的,仅仅添加一个salt对提高安全性几乎没有什么作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。使用诸如
PBKDF2
(又称
Rfc2898DeriveBytes
)、
password\u hash
/
password\u verify
Bcrypt
等函数和类似函数。关键是让攻击者花费大量时间通过暴力手段查找密码。保护您的用户很重要,请使用安全的密码方法。我只是想知道,如果我想验证用户密码(即使他已登录),以防将他重定向到某个安全页面,那么逻辑会是什么。那么,在这种情况下,如何比较密码呢。谢谢@m2mdasy您可以查看文章。还没试过呢。很有用的文章。非常感谢。这对我不起作用。确实如此:我尝试了这个,但不知怎么的,没有得到正确的哈希值!我猜FOSUserBundle使用salt对密码进行编码。
    $userName = 'username';
    $password = "pass";
    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->loadUserByUsername($userName);
    $encoder = $this->get('security.encoder_factory')->getEncoder($user);
    $encodedPass = $encoder->encodePassword($password, $user->getSalt());
    echo $user->getPassword() === $encodedPass;