AESContext
Hereda: RefCounted < Object
Proporciona acceso al cifrado/descifrado AES de datos sin procesar.
Descripción
Esta clase contiene la información de contexto necesaria para las operaciones de cifrado y descifrado con AES (Estándar de Cifrado Avanzado). Se admiten los modos AES-ECB y AES-CBC.
extends Node
var aes = AESContext.new()
func _ready():
var key = "¡¡¡Mi clave secreta!!!" # La clave debe tener 16 o 32 bytes.
var data = "¡¡¡Mi clave secreta!!!" # El tamaño de los datos debe ser múltiplo de 16 bytes, y aplicar relleno si es necesario.
# Encrypt ECB
aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer())
var encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# Decrypt ECB
aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8_buffer())
var decrypted = aes.update(encrypted)
aes.finish()
# Check ECB
assert(decrypted == data.to_utf8_buffer())
var iv = "¡¡¡Mi IV secreto!!!" # El IV debe tener exactamente 16 bytes.
# Encrypt CBC
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# Decrypt CBC
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
decrypted = aes.update(encrypted)
aes.finish()
# Check 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 = "¡¡¡Mi clave secreta!!!"; // La clave debe tener 16 o 32 bytes.
string data = "¡¡Mi clave secreta!!"; // El tamaño de los datos debe ser múltiplo de 16 bytes, y aplicar relleno si es necesario.
// Encrypt ECB
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer());
byte[] encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Decrypt ECB
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer());
byte[] decrypted = _aes.Update(encrypted);
_aes.Finish();
// Check ECB
Debug.Assert(decrypted == data.ToUtf8Buffer());
string iv = "¡¡¡¡Mi IV secreto!!!!"; // El IV debe tener exactamente 16 bytes.
// Encrypt CBC
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Decrypt CBC
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
decrypted = _aes.Update(encrypted);
_aes.Finish();
// Check CBC
Debug.Assert(decrypted == data.ToUtf8Buffer());
}
}
Métodos
void |
finish() |
start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) |
|
update(src: PackedByteArray) |
Enumeraciones
enum Mode: 🔗
Mode MODE_ECB_ENCRYPT = 0
Modo de cifrado ECB (Electronic Codebook) de AES.
Mode MODE_ECB_DECRYPT = 1
Modo de desencripción AES electronic codebook(ECB).
Mode MODE_CBC_ENCRYPT = 2
Modo de encripción AES cipher blocker chaining (CBC).
Mode MODE_CBC_DECRYPT = 3
Modo de desencripción AES cipher blocker chaining (CBC).
Mode MODE_MAX = 4
Valor máximo para el modo enum.
Descripciones de Métodos
void finish() 🔗
Cerrar este contexto AES para que pueda ser iniciado de nuevo. Véase start().
PackedByteArray get_iv_state() 🔗
Obtiene el estado actual de IV para este contexto (la IV se actualiza al llamar a update()). Normalmente no necesitas esta función.
Nota: Esta función solo tiene sentido cuando el contexto se inicia con MODE_CBC_ENCRYPT o MODE_CBC_DECRYPT.
Error start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) 🔗
Inicia el contexto AES en el mode dado. Siempre se debe proporcionar una key de 16 o 32 bytes, mientras que una iv (vector de inicialización) de exactamente 16 bytes, solo se necesita cuando mode es MODE_CBC_ENCRYPT o MODE_CBC_DECRYPT.
PackedByteArray update(src: PackedByteArray) 🔗
Ejecuta la operación deseada para este contexto AES. Devolverá un PackedByteArray que contiene el resultado de cifrar (o descifrar) la src dada. Véase start() para el modo de operación.
Nota: El tamaño de src debe ser un múltiplo de 16. Aplica algún relleno si es necesario.