AESContext¶
继承: RefCounted < Object
提供对原始数据的AES加密/解密的访问。
描述¶
这个类保存了使用AES(高级加密标准)进行加密和解密操作所需的上下文信息。支持AES-ECB和AES-CBC两种模式。
extends Item
var aes = AESContext.new()
func _ready():
var key = "My secret key!!!" # 密钥必须为 16 字节或 32 字节。
var data = "My secret text!!" # 数据大小必须是 16 字节的倍数,如有需要则进行填充处理。
# 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 = "My secret iv!!!!" # IV 必须恰好为 16 个字节。
# 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 i3D;
using System.Diagnostics;
public partial class MyNode : Item
{
private AesContext _aes = new AesContext();
public override void _Ready()
{
string key = "My secret key!!!"; // 密钥必须为 16 字节或 32 字节。
string data = "My secret text!!"; // 数据大小必须是 16 字节的倍数,如有需要则进行填充处理。
// 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 = "My secret iv!!!!"; // IV 必须恰好为 16 个字节。
// 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());
}
}
方法¶
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上下文所需的操作。将返回一个PackedByteArray,其中包含加密(或解密)给定src的结果。有关操作模式,请参阅start()。
注意:src的大小必须是16的倍数。如果需要,应用一些填充。