Files
godot-docs-l10n/classes/uk/class_hashingcontext.rst

181 lines
7.9 KiB
ReStructuredText
Raw Permalink 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.

:github_url: hide
.. _class_HashingContext:
HashingContext
==============
**Успадковує:** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
Надає функціональність для обчислення криптографічних хешів фрагмент за фрагментом.
.. rst-class:: classref-introduction-group
Опис
--------
Клас HashingContext надає інтерфейс для обчислення криптографічних хешів за кілька ітерацій. Корисно для обчислення хешів великих файлів (тому вам не доведеться завантажувати їх усі в пам’ять), мережевих потоків і потоків даних загалом (тому вам не доведеться зберігати буфери).
Перелік :ref:`HashType<enum_HashingContext_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<class_PackedByteArray>` | :ref:`finish<class_HashingContext_method_finish>`\ (\ ) |
+-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`start<class_HashingContext_method_start>`\ (\ type\: :ref:`HashType<enum_HashingContext_HashType>`\ ) |
+-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+
| :ref:`Error<enum_@GlobalScope_Error>` | :ref:`update<class_HashingContext_method_update>`\ (\ chunk\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) |
+-----------------------------------------------+----------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
----
.. rst-class:: classref-descriptions-group
Переліки
----------------
.. _enum_HashingContext_HashType:
.. rst-class:: classref-enumeration
enum **HashType**: :ref:`🔗<enum_HashingContext_HashType>`
.. _class_HashingContext_constant_HASH_MD5:
.. rst-class:: classref-enumeration-constant
:ref:`HashType<enum_HashingContext_HashType>` **HASH_MD5** = ``0``
Алгоритм хешування: MD5.
.. _class_HashingContext_constant_HASH_SHA1:
.. rst-class:: classref-enumeration-constant
:ref:`HashType<enum_HashingContext_HashType>` **HASH_SHA1** = ``1``
Алгоритм хешування: SHA-1.
.. _class_HashingContext_constant_HASH_SHA256:
.. rst-class:: classref-enumeration-constant
:ref:`HashType<enum_HashingContext_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<class_PackedByteArray>` **finish**\ (\ ) :ref:`🔗<class_HashingContext_method_finish>`
Закриває поточний контекст і повертає обчислений хеш.
.. rst-class:: classref-item-separator
----
.. _class_HashingContext_method_start:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **start**\ (\ type\: :ref:`HashType<enum_HashingContext_HashType>`\ ) :ref:`🔗<class_HashingContext_method_start>`
Запускає нове обчислення хешу заданого ``type`` (наприклад, :ref:`HASH_SHA256<class_HashingContext_constant_HASH_SHA256>` для початку обчислення SHA-256).
.. rst-class:: classref-item-separator
----
.. _class_HashingContext_method_update:
.. rst-class:: classref-method
:ref:`Error<enum_@GlobalScope_Error>` **update**\ (\ chunk\: :ref:`PackedByteArray<class_PackedByteArray>`\ ) :ref:`🔗<class_HashingContext_method_update>`
Оновлює обчислення з даними ``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 (Значення не повертається.)`