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())

方法


枚举

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_ENCRYPTMODE_CBC_DECRYPT启动时才有意义。


Error start(mode: Mode, key: PackedByteArray, iv: PackedByteArray = PackedByteArray()) 🔗

以给定的mode启动AES上下文。必须始终提供16或32字节的key,而只有当modeMODE_CBC_ENCRYPTMODE_CBC_DECRYPT时,才需要正好16字节的iv(初始化向量)。


PackedByteArray update(src: PackedByteArray) 🔗

运行此AES上下文所需的操作。将返回一个PackedByteArray,其中包含加密(或解密)给定src的结果。有关操作模式,请参阅start()

注意:src的大小必须是16的倍数。如果需要,应用一些填充。