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...
AESContext
Наследует: RefCounted < Object
Предоставляет доступ к шифрованию/дешифрованию необработанных данных по алгоритму AES.
Описание
Этот класс содержит контекстную информацию, необходимую для операций шифрования и дешифрования с помощью AES (Advanced Encryption Standard). Поддерживаются режимы AES-ECB и AES-CBC.
extends Node
var aes = AESContext.new()
func _ready():
var key = "My secret key!!!" # Ключ должен быть длиной 16 или 32 байта.
var data = "My secret text!!" # Размер данных должен быть кратен 16 байтам, при необходимости используйте заполнение.
# Зашифровать ECB
aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer())
var encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# Расшифровать ECB
aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8_buffer())
var decrypted = aes.update(encrypted)
aes.finish()
# Проверить ECB
assert(decrypted == data.to_utf8_buffer())
var iv = "My secret iv!!!!" # IV должен состоять ровно из 16 байт.
# Зашифровать CBC
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# Расшифровать CBC
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
decrypted = aes.update(encrypted)
aes.finish()
# Проверить CBC
assert(decrypted == data.to_utf8_buffer())
using Godot;
using System.Diagnostics;
public partial class MyNode : Node
{
private AesContext _aes = new AesContext();
public override void _Ready()
{
string key = "My secret key!!!"; // Ключ должен быть длиной 16 или 32 байта.
string data = "My secret text!!"; // Размер данных должен быть кратен 16 байтам, при необходимости используйте заполнение.
// Зашифровать ECB
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer());
byte[] encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Расшифровать ECB
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer());
byte[] decrypted = _aes.Update(encrypted);
_aes.Finish();
// Проверить ECB
Debug.Assert(decrypted == data.ToUtf8Buffer());
string iv = "My secret iv!!!!"; // IV должен состоять ровно из 16 байт.
// Зашифровать CBC
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Расшифровать CBC
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
decrypted = _aes.Update(encrypted);
_aes.Finish();
// Проверить CBC
Debug.Assert(decrypted == data.ToUtf8Buffer());
}
}
Методы
void |
finish() |
start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) |
|
update(src: PackedByteArray) |
Перечисления
enum Mode: 🔗
Mode MODE_ECB_ENCRYPT = 0
AES режим шифрования электронной кодовой книги.
Mode MODE_ECB_DECRYPT = 1
AES режим дешифрования электронной кодовой книги.
Mode MODE_CBC_ENCRYPT = 2
Режим шифрования с использованием цепочки блоков AES.
Mode MODE_CBC_DECRYPT = 3
Режим дешифрования с использованием цепочки блоков шифрования AES.
Mode MODE_MAX = 4
Максимальное значение для режима перечисления.
Описания метода
void finish() 🔗
Закрыть данный AES-контекст, чтобы его можно было запустить заново. См. раздел start().
PackedByteArray get_iv_state() 🔗
Получить текущее IV состояние для данного контекста (IV обновляется при вызове update()). Обычно эта функция вам не нужна.
Примечание: Эта функция имеет смысл только тогда, когда контекст запущен с MODE_CBC_ENCRYPT или MODE_CBC_DECRYPT.
Error start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) 🔗
Запустите контекст AES в заданном mode. Всегда должен быть указан key из 16 или 32 байт, тогда как iv (вектор инициализации) из ровно 16 байт требуется только тогда, когда mode равен MODE_CBC_ENCRYPT или MODE_CBC_DECRYPT.
PackedByteArray update(src: PackedByteArray) 🔗
Выполнить нужную операцию для этого контекста AES. Вернет PackedByteArray, содержащий результат шифрования (или расшифровки) указанного src. См. start() для режима работы.
Примечание: Размер src должен быть кратен 16. При необходимости примените некоторое заполнение.