AESContext
继承: RefCounted < Object
提供对原始数据的 AES 加密/解密的访问。
描述
这个类存放的是进行 AES(Advanced Encryption Standard,高级加密标准)加解密所需的上下文信息。支持 AES-ECB 和 AES-CBC 两种模式。
GDScriptC#
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 倍的倍数。如果需要,应用一些填充。