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.

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

get_iv_state()

Error

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