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

181 lines
8.2 KiB
ReStructuredText
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.

: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 remaining = (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 (Нет возвращаемого значения.)`