babaev-an 3aefbd7f27 20250214-1
[Д] [HashGetType]: Добавлен параметр ByHash (для получения класса хеша путём передачи ему уже вычисленного хэша).

[О] [FileHash]: __construct - $hashBy по умолчанию теперь HashGetType::ByHash.

[Д] [FileHash]: Добавлены функции сериализации и десериализации (теперь класс реализует интерфейс ISerializable).

[Д] [FileHash]: Добавлена функции валидации хэша Validate.
2025-02-14 19:07:21 +03:00

108 lines
3.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace goodboyalex\php_components_pack\classes;
use goodboyalex\php_components_pack\enums\HashGetType;
use goodboyalex\php_components_pack\extensions\StringExtension;
use goodboyalex\php_components_pack\interfaces\ISerializable;
/**
* Класс для работы с хэшем файла или строки.
*
* @author Александр Бабаев
* @package php_components_pack
* @version 1.0.1
* @since 1.0.5
*/
final class FileHash implements ISerializable
{
/**
* @var string $Hash Хэш файла.
*/
private(set) string $Hash;
/**
* Конструктор.
*
* @param string $str Хэщ, строка или имя файла.
* @param HashGetType $hashBy Тип получения хэша.
*/
public function __construct (string $str = "", HashGetType $hashBy = HashGetType::ByHash)
{
$this->Hash = match ($hashBy) {
HashGetType::ByString => $this->pGetHash($str),
HashGetType::ByFile => $this->pGetFileHash($str),
HashGetType::ByHash => $str
};
}
/**
* Получение хэша файла по строке.
*
* @param string $str Строка.
*
* @return string Хэш строки.
*/
private function pGetHash (string $str): string
{
return hash('sha256', $str);
}
/**
* Получение хэша файла по имени файла.
*
* @param string $fileName Имя файла.
*
* @return string Хэш файла.
*/
private function pGetFileHash (string $fileName): string
{
return hash_file('sha256', $fileName);
}
/**
* Сравнивает текущий хэш с хэшем <code>otherHash</code> и выдаёт <code>true</code>, если совпадают, и
* <code>false</code>, если не совпадают.
*
* @param FileHash $otherHash Другой хэш.
*
* @return bool <code>true</code>, если совпадают, и <code>false</code>, если не совпадают.
*/
public function IsEqual (FileHash $otherHash): bool
{
return StringExtension::Compare($this->Hash, $otherHash->Hash, true) === 0;
}
/**
* Проверяет, совпадает ли хэш с хэшем/файлом/строкой <code>str</code>.
*
* @param string $str Хэш, строка или имя файла.
* @param HashGetType $hashBy Тип получения хэша.
*
* @return bool <code>true</code>, если совпадают, и <code>false</code>, если не совпадают.
*/
public function Validate (string $str, HashGetType $hashBy): bool
{
return match ($hashBy) {
HashGetType::ByString => $this->pGetHash($str) == $this->Hash,
HashGetType::ByFile => $this->pGetFileHash($str) == $this->Hash,
HashGetType::ByHash => $str == $this->Hash,
};
}
/**
* @inheritDoc
*/
public function Serialize (): string
{
return serialize($this->Hash);
}
/**
* @inheritDoc
*/
public function UnSerialize (string $serialized): void
{
$this->Hash = unserialize($serialized);
}
}