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. При необходимости примените некоторое заполнение.