AESContext
Eredita: RefCounted < Object
Fornisce l'accesso alla crittografia/decrittazione AES dei dati grezzi.
Descrizione
Questa classe contiene le informazioni di contesto necessarie per le operazioni di crittografia e decrittazione con AES (Advanced Encryption Standard). Entrambe le modalità AES-ECB e AES-CBC sono supportate.
extends Node
var aes = AESContext.new()
func _ready():
var key = "My secret key!!!" # La chiave deve essere 16 o 32 byte.
var data = "My secret text!!" # La dimensione dei dati deve essere un multiplo di 16 byte, imbottisci se necessario.
# Cripta ECB
aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer())
var encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# Decripta ECB
aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8_buffer())
var decrypted = aes.update(encrypted)
aes.finish()
# Verifica ECB
assert(decrypted == data.to_utf8_buffer())
var iv = "My secret iv!!!!" # IV deve essere esattamente 16 byte.
# Cripta CBC
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# Decripta CBC
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
decrypted = aes.update(encrypted)
aes.finish()
# Verifica 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!!!"; // La chiave deve essere 16 o 32 byte.
string data = "My secret text!!"; // La dimensione dei dati deve essere un multiplo di 16 byte, imbottisci se necessario.
// Cripta ECB
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer());
byte[] encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Decripta ECB
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer());
byte[] decrypted = _aes.Update(encrypted);
_aes.Finish();
// Verifica CBC
Debug.Assert(decrypted == data.ToUtf8Buffer());
string iv = "My secret iv!!!!"; // IV deve essere esattamente 16 byte.
// Cripta CBC
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// Decripta CBC
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
decrypted = _aes.Update(encrypted);
_aes.Finish();
// Verifica CBC
Debug.Assert(decrypted == data.ToUtf8Buffer());
}
}
Metodi
void |
finish() |
start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) |
|
update(src: PackedByteArray) |
Enumerazioni
enum Mode: 🔗
Mode MODE_ECB_ENCRYPT = 0
Modalità di crittografia di codebook elettronico AES.
Mode MODE_ECB_DECRYPT = 1
Modalità di decrittazione di codebook elettronico AES.
Mode MODE_CBC_ENCRYPT = 2
Modalità di crittografia di blocchi cifrati concatenati AES.
Mode MODE_CBC_DECRYPT = 3
Modalità di decrittazione di blocchi cifrati concatenati AES.
Mode MODE_MAX = 4
Valore massimo dell'enumerazione di modalità.
Descrizioni dei metodi
void finish() 🔗
Chiudere questo contesto AES in modo che possa essere ricominciato. Vedi start().
PackedByteArray get_iv_state() 🔗
Ottiene lo stato IV attuale per questo contesto (IV viene aggiornato quando viene chiamato update()). Normalmente non hai bisogno di questa funzione.
Nota: Questa funzione ha senso solo quando il contesto è iniziato con MODE_CBC_ENCRYPT o MODE_CBC_DECRYPT.
Error start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) 🔗
Avvia il contesto AES nella modalità mode fornita. Una chiave (key) di 16 o 32 byte deve essere sempre fornita, mentre un iv (vettore di inizializzazione) di esattamente 16 byte è necessario solo quando mode è MODE_CBC_ENCRYPT o MODE_CBC_DECRYPT.
PackedByteArray update(src: PackedByteArray) 🔗
Eseguire l'operazione desiderata per questo contesto AES. Ritornerà un PackedByteArray contenente il risultato della crittografia (o decrittazione) del src fornito. Vedi start() per le modalità di funzionamento.
Nota: La dimensione di src deve essere un multiplo di 16. Applica un po' di imbottitura se necessario.