src/Phug/Util/Util/Hasher.php
<?php
namespace Phug\Util;
class Hasher
{
/**
* Input string to hash.
*
* @var string
*/
protected $input;
public function __construct($input)
{
$this->input = $input;
}
/**
* Return a hashed print for the current input file or content.
*
* @return string
*/
public function hash()
{
// Get the stronger hashing algorithm available to minimize collision risks
$algorithms = hash_algos();
$algorithm = $algorithms[0];
$number = 0;
foreach ($this->getMdAndShaAlgorithms($algorithms) as list($hashAlgorithm, $hashNumber)) {
if ($hashNumber > $number) {
$number = $hashNumber;
$algorithm = $hashAlgorithm;
}
}
return rtrim(strtr(base64_encode(hash($algorithm, $this->input, true)), '+/', '-_'), '=');
}
private function getMdAndShaAlgorithms($algorithms)
{
foreach ($algorithms as $hashAlgorithm) {
$lettersLength = $this->getPrefixLength($hashAlgorithm);
if ($lettersLength) {
$hashNumber = substr($hashAlgorithm, $lettersLength);
yield [$hashAlgorithm, $hashNumber];
}
}
}
private function getPrefixLength($hashAlgorithm)
{
return substr($hashAlgorithm, 0, 2) === 'md'
? 2
: (
substr($hashAlgorithm, 0, 3) === 'sha'
? 3
: 0
);
}
}