Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
HashingContext
Наследует: RefCounted < Object
Предоставляет функциональность для вычисления криптографических хешей по частям.
Описание
Класс HashingContext предоставляет интерфейс для вычисления криптографических хэшей в течение нескольких итераций. Полезно для вычисления хэшей больших файлов (чтобы вам не приходилось загружать их все в память), сетевых потоков и потоков данных в целом (чтобы вам не приходилось хранить буферы).
Перечисление HashType показывает поддерживаемые алгоритмы хэширования.
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))
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);
}
Методы
finish() |
|
update(chunk: PackedByteArray) |
Перечисления
enum HashType: 🔗
HashType HASH_MD5 = 0
Алгоритм хэширования: MD5.
HashType HASH_SHA1 = 1
Алгоритм хэширования: SHA-1.
HashType HASH_SHA256 = 2
Алгоритм хэширования: SHA-256.
Описания метода
PackedByteArray finish() 🔗
Закрывает текущий контекст и возвращает вычисленный хэш.
Запускает новое вычисление хэша указанного type (например, HASH_SHA256 для запуска вычисления SHA-256).
Error update(chunk: PackedByteArray) 🔗
Обновляет вычисление с использованием указанного chunk данных.