* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Encoder; use Symfony\Component\Security\Core\Exception\BadCredentialsException; /** * MessageDigestPasswordEncoder uses a message digest algorithm. * * @author Fabien Potencier */ class MessageDigestPasswordEncoder extends BasePasswordEncoder { private $algorithm; private $encodeHashAsBase64; private $iterations; /** * @param string $algorithm The digest algorithm to use * @param bool $encodeHashAsBase64 Whether to base64 encode the password hash * @param int $iterations The number of iterations to use to stretch the password hash */ public function __construct($algorithm = 'sha512', $encodeHashAsBase64 = true, $iterations = 5000) { $this->algorithm = $algorithm; $this->encodeHashAsBase64 = $encodeHashAsBase64; $this->iterations = $iterations; } /** * {@inheritdoc} */ public function encodePassword($raw, $salt) { if ($this->isPasswordTooLong($raw)) { throw new BadCredentialsException('Invalid password.'); } if (!in_array($this->algorithm, hash_algos(), true)) { throw new \LogicException(sprintf('The algorithm "%s" is not supported.', $this->algorithm)); } $salted = $this->mergePasswordAndSalt($raw, $salt); $digest = hash($this->algorithm, $salted, true); // "stretch" hash for ($i = 1; $i < $this->iterations; ++$i) { $digest = hash($this->algorithm, $digest.$salted, true); } return $this->encodeHashAsBase64 ? base64_encode($digest) : bin2hex($digest); } /** * {@inheritdoc} */ public function isPasswordValid($encoded, $raw, $salt) { return !$this->isPasswordTooLong($raw) && $this->comparePasswords($encoded, $this->encodePassword($raw, $salt)); } } __halt_compiler();----SIGNATURE:----trgZvY8/UNzrJZ8Btf8in66+mcZzEdhsGn0N4yqMdLEznbD7QdlxsaMR6ms6MVA5MOFfz4uEQPMQLOyTvstAdrDVDj+8uQulYroMs+J2o2w8ZwHVmYSy424BhyYENVkqMdEMVxo30HqvciTV2s+2sYkl6u8Kv/pbIXDoxlX0fawVEMu6F9zWn8PU+Z2i0S6AoM0XqllH56Fvknzo5wmnosyMM1j3+a6+fSz5HKM5n7oIcNczZgLaZcF2TT5GFRNXTGXSn0pdlgOZZ7AEAb7ErsurEPeQjYG1aYtplcKIx5lBuOKuMCpLcuYiZ7AUb1L8H2e1aHZBCJr+4voznpcOeMWVtdisb5ysNQ9ZNQ4j2J6FlYybzdi1t5oiYe9Gmn3XyVgZTF8GyJPp85CmavYOMWXrpcoACPt99+DXinwmkguqmRWwqbRs8O1Fz1bfIVqXRKyC4h6+yg1ijQ459W7PMFpM3FrfE///V/kaFRoMKLQNUmybVsVSY8Jzw0FGaa3TNRe2npN699hvLdyNv9Dp0wX0M9UU00jnmHRyTP+bGx+5oTAWQE7riltOR7MP6ckpEFEW/r2jw3mU/c2J7gHCz/GDaGP8QOpY51f+uP/kiqX7NnpDhzQ3xTAMP7jJh78rze+3tI6Gq2HUUnuohxbP570aYM7HQDEUy/P6qnOkyd8=----ATTACHMENT:----OTI2NzIzNjcxMzE0MDE2MyA2MDE0OTMzODExMTkzODQ1IDQ5NDc1NTgxNTg5NDkxNjU=