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.
[gdscript]
extends Node
var aes = AESContext.new()
func _ready():
var key = "Мій секретний ключ!!!" # Ключ має мати 16 або 32 байти.
var data = "Мій секретний текст!!" # Розмір даних має бути кратним 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 = "Мій секрет iv!!!!" # IV має мати рівно 16 байт.
# Шифруйте CBC
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
зашифровано = aes.update(data.to_utf8_buffer())
aes.finish()
# Розшифруйте CBC
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
розшифровано = aes.update(зашифровано)
aes.finish()
# Перевірити CBC
assert(decrypted == data.to_utf8_buffer())
[/gdscript]
[csharp]
using Godot;
using System.Diagnostics;
public partial class MyNode : Node
{
private AesContext _aes = новий AesContext();
public override void _Ready()
{
string key = "Мій секретний ключ!!!"; // Ключ має мати 16 або 32 байти.
string data = "Мій секретний текст!!"; // Розмір даних має бути кратним 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 = "Мій секрет iv!!!!"; // IV має мати рівно 16 байт.
// Шифрувати CBC
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
зашифровано = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Розшифрувати CBC
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
розшифровано = _aes.Update(зашифровано);
_aes.Finish();
// Перевірити CBC
Debug.Assert(decrypted == data.ToUtf8Buffer());
}
}
[/csharp][/codeblocks]
Методи
void |
finish() |
PackedByteArray |
|
start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = 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. При необхідності наберіть трохи пробілів.