AESContext
繼承: RefCounted < Object
提供對原始資料的 AES 加密/解密的存取。
說明
這個類存放的是進行 AES(Advanced Encryption Standard,高級加密標準)加解密所需的本文信息。支援 AES-ECB 和 AES-CBC 兩種模式。
extends Node
var aes = AESContext.new()
func _ready():
var key = "My secret key!!!" # 金鑰必須是 16 或 32 位元組。
var data = "My secret text!!" # 資料大小必須是 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 = "My secret iv!!!!" # IV 必須是 16 位元組。
# CBC 加密
aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
encrypted = aes.update(data.to_utf8_buffer())
aes.finish()
# CBC 解密
aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
decrypted = aes.update(encrypted)
aes.finish()
# 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!!!"; // 金鑰必須是 16 或 32 位元組。
string data = "My secret text!!"; // 資料大小必須是 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 = "My secret iv!!!!"; // IV 必須是 16 位元組。
// CBC 加密
_aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
encrypted = _aes.Update(data.ToUtf8Buffer());
_aes.Finish();
// CBC 解密
_aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
decrypted = _aes.Update(encrypted);
_aes.Finish();
// CBC 校驗
Debug.Assert(decrypted == data.ToUtf8Buffer());
}
}
方法
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 狀態(呼叫 update() 時會更新 IV)。通常不需要此函式。
注意:僅當本文以 MODE_CBC_ENCRYPT 或 MODE_CBC_DECRYPT 開頭時,此函式才有意義。
Error start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) 🔗
在給定的 mode 中啟動 AES 本文。必須始終提供 16 或 32 位元組的 key,而僅當 mode 為 MODE_CBC_ENCRYPT 或 MODE_CBC_DECRYPT 時,才需要正好為 16 位元組的 iv(初始化向量)。
PackedByteArray update(src: PackedByteArray) 🔗
運作此 AES 本文所需的操作。將返回包含加密(或解密)給定 src 結果的 PackedByteArray 。有關操作模式,請參閱 start()。
注意:src 的大小必須是 16 倍的倍數。如果需要,套用一些填充。