使用脚本加密密钥编译

发行游戏时, 导出对话框为您提供了使用256位AES密钥加密脚本的选项. 这样可以确保您的脚本不会以纯文本格式存储, 并且不会被某些脚本小子轻易地剖析. 当然, 密钥需要存储在二进制文件中, 但是如果对其进行了编译, 优化并不带符号, 则将需要一些努力才能找到它. 为此, 您需要使用相同的密钥从源代码构建导出模板.

渐进式教程

  1. 此服务 的aes-256-cbc变体. 或者, 您可以通过使用OpenSSL自己生成:
  1. openssl enc -aes-256-cbc -k secret -P -md sha1 > godot.gdkey

godot.gdkey 文件:

  1. salt=5786FE8B91CA048Akey=D2F90FCC4FCA64B8990F916EF5A73230C1841601D1EA06B2380EC0F530E4EF85iv =047C353AEC9E6C211515E3341BF9C61B

您可以生成密钥, 而无需将输出重定向到文件, 但这样能将暴露密钥的风险降到最低.

  1. 在控制台中将此键设置为环境变量, 将用于编译Godot, 如下所示: Linux/macOS Windows (cmd) Windows (PowerShell)
  1. export SCRIPT_AES256_ENCRYPTION_KEY="your_generated_key"
  1. set SCRIPT_AES256_ENCRYPTION_KEY=your_generated_key
  1. $env:SCRIPT_AES256_ENCRYPTION_KEY="your_generated_key"
  1. 编译Godot导出模板, 并在导出预设选项中将它们设置为自定义导出模板.
  2. 脚本 选项卡中, 设置加密密钥: 5.

    可能出现的错误

    如果出现如下错误, 这意味着密钥没有正确地包含在Godot构建中.Godot在导出过程中对脚本进行加密, 但在运行时无法读取它们.
    1. ERROR: open_and_parse: Condition "String::md5(md5.digest) != String::md5(md5d)" is true. Returning: ERR_FILE_CORRUPT At: core/io/file_access_encrypted.cpp:103ERROR: load_byte_code: Condition ' err ' is true. returned: err At: modules/gdscript/gdscript.cpp:755ERROR: load: Condition ' err != OK ' is true. returned: RES() At: modules/gdscript/gdscript.cpp:2135ERROR: Failed loading resource: res://Node2D.gde At: core/io/resource_loader.cpp:279ERROR: poll: res://Node2D.tscn:3 - Parse Error: [ext_resource] referenced nonexistent resource at: res://Node2D.gd At: scene/resources/scene_format_text.cpp:439ERROR: load: Condition ' err != OK ' is true. returned: RES() At: core/io/resource_loader.cpp:202ERROR: Failed loading resource: res://Node2D.tscn At: core/io/resource_loader.cpp:279ERROR: Failed loading scene: res://Node2D.tscn At: main/main.cpp:1727WARNING: cleanup: ObjectDB Instances still exist! At: core/object.cpp:2081ERROR: clear: Resources Still in use at Exit! At: core/resource.cpp:425