![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/laminas/laminas-crypt/src/Key/Derivation/ |
<?php namespace Laminas\Crypt\Key\Derivation; use Laminas\Crypt\Hmac; use function ceil; use function hash_hmac; use function mb_substr; use function pack; /** * PKCS #5 v2.0 standard RFC 2898 */ class Pbkdf2 { /** * Generate the new key * * @param string $hash The hash algorithm to be used by HMAC * @param string $password The source password/key * @param string $salt * @param int $iterations The number of iterations * @param int $length The output size * @throws Exception\InvalidArgumentException * @return string */ public static function calc($hash, $password, $salt, $iterations, $length) { if (! Hmac::isSupported($hash)) { throw new Exception\InvalidArgumentException("The hash algorithm $hash is not supported by " . self::class); } $num = ceil($length / Hmac::getOutputSize($hash, Hmac::OUTPUT_BINARY)); $result = ''; for ($block = 1; $block <= $num; $block++) { $hmac = hash_hmac($hash, $salt . pack('N', $block), $password, Hmac::OUTPUT_BINARY); $mix = $hmac; for ($i = 1; $i < $iterations; $i++) { $hmac = hash_hmac($hash, $hmac, $password, Hmac::OUTPUT_BINARY); $mix ^= $hmac; } $result .= $mix; } return mb_substr($result, 0, $length, '8bit'); } }