:github_url: hide .. _class_HashingContext: HashingContext ============== **Успадковує:** :ref:`RefCounted` **<** :ref:`Object` Надає функціональність для обчислення криптографічних хешів фрагмент за фрагментом. .. rst-class:: classref-introduction-group Опис -------- Клас HashingContext надає інтерфейс для обчислення криптографічних хешів за кілька ітерацій. Корисно для обчислення хешів великих файлів (тому вам не доведеться завантажувати їх усі в пам’ять), мережевих потоків і потоків даних загалом (тому вам не доведеться зберігати буфери). Перелік :ref:`HashType` показує підтримувані алгоритми хешування. .. tabs:: .. code-tab:: gdscript const CHUNK_SIZE = 1024 func hash_file(path): # Перевірити наявність файлу. if not FileAccess.file_exists(path): return # Запустіть контекст SHA-256. var ctx = HashingContext.new() ctx.start(HashingContext.HASH_SHA256) # Відкрийте файл для хешування. var file = FileAccess.open(path, FileAccess.READ) # Оновлюйте контекст після читання кожного фрагмента. while file.get_position() < file.get_length(): var remaining = file.get_length() - file.get_position() ctx.update(file.get_buffer(min(remaining, CHUNK_SIZE))) # Отримайте обчислений хеш. var res = ctx.finish() # Вивести результат як шістнадцятковий рядок і масив. printt(res.hex_encode(), Array(res)) .. code-tab:: csharp public const int ChunkSize = 1024; public void HashFile (string path) { // Перевірка існування файлу. if (!FileAccess.FileExists(path)) { return; } // Запуск контексту SHA-256. var ctx = new HashingContext(); ctx.Start(HashingContext.HashType.Sha256); // Відкрити файл для хешування. using var file = FileAccess.Open(path, FileAccess.ModeFlags.Read); // Оновлення контексту після читання кожного шматка. while (file.GetPosition() < file.GetLength()) { int remainder = (int)(file.GetLength() - file.GetPosition()); ctx.Update(file.GetBuffer(Mathf.Min(remaining, ChunkSize))); } // Отримати обчислений хеш. byte[] res = ctx.Finish(); // Вивести результат як шістнадцятковий рядок і масив. GD.PrintT(res.HexEncode(), (Variant)res); } .. rst-class:: classref-reftable-group Методи ------------ .. table:: :widths: auto +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+ | :ref:`PackedByteArray` | :ref:`finish`\ (\ ) | +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`start`\ (\ type\: :ref:`HashType`\ ) | +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+ | :ref:`Error` | :ref:`update`\ (\ chunk\: :ref:`PackedByteArray`\ ) | +-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+ .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Переліки ---------------- .. _enum_HashingContext_HashType: .. rst-class:: classref-enumeration enum **HashType**: :ref:`🔗` .. _class_HashingContext_constant_HASH_MD5: .. rst-class:: classref-enumeration-constant :ref:`HashType` **HASH_MD5** = ``0`` Алгоритм хешування: MD5. .. _class_HashingContext_constant_HASH_SHA1: .. rst-class:: classref-enumeration-constant :ref:`HashType` **HASH_SHA1** = ``1`` Алгоритм хешування: SHA-1. .. _class_HashingContext_constant_HASH_SHA256: .. rst-class:: classref-enumeration-constant :ref:`HashType` **HASH_SHA256** = ``2`` Алгоритм хешування: SHA-256. .. rst-class:: classref-section-separator ---- .. rst-class:: classref-descriptions-group Описи методів -------------------------- .. _class_HashingContext_method_finish: .. rst-class:: classref-method :ref:`PackedByteArray` **finish**\ (\ ) :ref:`🔗` Закриває поточний контекст і повертає обчислений хеш. .. rst-class:: classref-item-separator ---- .. _class_HashingContext_method_start: .. rst-class:: classref-method :ref:`Error` **start**\ (\ type\: :ref:`HashType`\ ) :ref:`🔗` Запускає нове обчислення хешу заданого ``type`` (наприклад, :ref:`HASH_SHA256` для початку обчислення SHA-256). .. rst-class:: classref-item-separator ---- .. _class_HashingContext_method_update: .. rst-class:: classref-method :ref:`Error` **update**\ (\ chunk\: :ref:`PackedByteArray`\ ) :ref:`🔗` Оновлює обчислення з даними ``chunk`` даних. .. |virtual| replace:: :abbr:`virtual (Зазвичай, цей метод перевизначається користувачем, щоб він мав вплив.)` .. |required| replace:: :abbr:`required (This method is required to be overridden when extending its base class.)` .. |const| replace:: :abbr:`const (Цей метод не має побічних ефектів. Не змінює ніяку змінну екземпляра об'єкта.)` .. |vararg| replace:: :abbr:`vararg (Цей метод приймає будь-яке число аргументів після описаних тут.)` .. |constructor| replace:: :abbr:`constructor (Цей метод використовується для побудови типів.)` .. |static| replace:: :abbr:`static (Цей метод не потребує екземпляра для виклику, його можна викликати безпосередньо за допомогою назви класу.)` .. |operator| replace:: :abbr:`operator (Цей метод описує дійсний оператор для взаємодії з цим типом як з лівим операндом.)` .. |bitfield| replace:: :abbr:`BitField (Це значення є цілим числом, складеним у вигляді бітової маски з наступних прапорів.)` .. |void| replace:: :abbr:`void (Значення не повертається.)`