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() |
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. При необхідності наберіть трохи пробілів.