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.
Checking the stable version of the documentation...
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 cipher block chaining encryption mode.
Mode MODE_CBC_DECRYPT = 3
AES cipher block chaining decryption mode.
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 倍的倍數。如果需要,套用一些填充。