AESContext

继承: RefCounted < Object

提供对原始数据的 AES 加密/解密的访问。

描述

这个类存放的是进行 AES(Advanced Encryption Standard,高级加密标准)加解密所需的上下文信息。支持 AES-ECB 和 AES-CBC 两种模式。

GDScriptC#

  1. extends Node
  2. var aes = AESContext.new()
  3. func _ready():
  4. var key = "My secret key!!!" # 密钥必须是 16 或 32 字节。
  5. var data = "My secret text!!" # 数据大小必须是 16 字节的倍数,需要时添加补白。
  6. # ECB 加密
  7. aes.start(AESContext.MODE_ECB_ENCRYPT, key.to_utf8_buffer())
  8. var encrypted = aes.update(data.to_utf8_buffer())
  9. aes.finish()
  10. # ECB 解密
  11. aes.start(AESContext.MODE_ECB_DECRYPT, key.to_utf8_buffer())
  12. var decrypted = aes.update(encrypted)
  13. aes.finish()
  14. # ECB 校验
  15. assert(decrypted == data.to_utf8_buffer())
  16. var iv = "My secret iv!!!!" # IV 必须是 16 字节。
  17. # CBC 加密
  18. aes.start(AESContext.MODE_CBC_ENCRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
  19. encrypted = aes.update(data.to_utf8_buffer())
  20. aes.finish()
  21. # CBC 解密
  22. aes.start(AESContext.MODE_CBC_DECRYPT, key.to_utf8_buffer(), iv.to_utf8_buffer())
  23. decrypted = aes.update(encrypted)
  24. aes.finish()
  25. # CBC 校验
  26. assert(decrypted == data.to_utf8_buffer())
  1. using Godot;
  2. using System.Diagnostics;
  3. public partial class MyNode : Node
  4. {
  5. private AesContext _aes = new AesContext();
  6. public override void _Ready()
  7. {
  8. string key = "My secret key!!!"; // 密钥必须是 16 或 32 字节。
  9. string data = "My secret text!!"; // 数据大小必须是 16 字节的倍数,需要时添加补白。
  10. // ECB 加密
  11. _aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer());
  12. byte[] encrypted = _aes.Update(data.ToUtf8Buffer());
  13. _aes.Finish();
  14. // ECB 解密
  15. _aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer());
  16. byte[] decrypted = _aes.Update(encrypted);
  17. _aes.Finish();
  18. // ECB 校验
  19. Debug.Assert(decrypted == data.ToUtf8Buffer());
  20. string iv = "My secret iv!!!!"; // IV 必须是 16 字节。
  21. // CBC 加密
  22. _aes.Start(AesContext.Mode.EcbEncrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
  23. encrypted = _aes.Update(data.ToUtf8Buffer());
  24. _aes.Finish();
  25. // CBC 解密
  26. _aes.Start(AesContext.Mode.EcbDecrypt, key.ToUtf8Buffer(), iv.ToUtf8Buffer());
  27. decrypted = _aes.Update(encrypted);
  28. _aes.Finish();
  29. // CBC 校验
  30. Debug.Assert(decrypted == data.ToUtf8Buffer());
  31. }
  32. }

方法

void

finish ( )

PackedByteArray

get_iv_state ( )

Error

start ( Mode mode, PackedByteArray key, PackedByteArray iv=PackedByteArray() )

PackedByteArray

update ( PackedByteArray src )


枚举

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, PackedByteArray key, PackedByteArray iv=PackedByteArray() )

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


PackedByteArray update ( PackedByteArray src )

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

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

Previous Next


© 版权所有 2014-present Juan Linietsky, Ariel Manzur and the Godot community (CC BY 3.0). Revision b1c660f7.

Built with Sphinx using a theme provided by Read the Docs.