Compiling with script encryption key

    Of course, the key needs to be stored in the binary, but if it’s compiled, optimized and without symbols, it would take some effort to find it.

    For this to work, you need to build the export templates from source, with that same key.

    Warning

    This will not work if you use official, precompiled export templates. It is absolutely required to compile your own export templates to use PCK encryption.

    1. Alternatively, you can generate it yourself using command-line tools:

      The output in should be similar to:

      1. # NOTE: Do not use the key below! Generate your own key instead.
      2. aeb1bc56aaf580cc31784e9c41551e9ed976ecba10d315db591e749f3f64890f

      You can generate the key without redirecting the output to a file, but that way you can minimize the risk of exposing the key.

    2. Set this key as environment variable in the console that you will use to compile Godot, like this:

      1. set SCRIPT_AES256_ENCRYPTION_KEY=your_generated_key
    3. Compile Godot export templates and set them as custom export templates in the export preset options.

    4. Set the encryption key in the Script tab of the export preset:

    Troubleshooting

    If you get an error like below, it means the key wasn’t properly included in your Godot build. Godot is encrypting the scripts during export, but can’t read them at runtime.

    1. ERROR: open_and_parse: Condition "String::md5(md5.digest) != String::md5(md5d)" is true. Returning: ERR_FILE_CORRUPT
    2. At: core/io/file_access_encrypted.cpp:103
    3. ERROR: load_byte_code: Condition ' err ' is true. returned: err
    4. At: modules/gdscript/gdscript.cpp:755
    5. At: modules/gdscript/gdscript.cpp:2135
    6. ERROR: Failed loading resource: res://Node2D.gde
    7. At: core/io/resource_loader.cpp:279
    8. ERROR: poll: res://Node2D.tscn:3 - Parse Error: [ext_resource] referenced nonexistent resource at: res://Node2D.gd
    9. ERROR: load: Condition ' err != OK ' is true. returned: RES()
    10. At: core/io/resource_loader.cpp:202
    11. At: core/io/resource_loader.cpp:279
    12. ERROR: Failed loading scene: res://Node2D.tscn
    13. At: main/main.cpp:1727
    14. WARNING: cleanup: ObjectDB Instances still exist!
    15. At: core/object.cpp:2081
    16. ERROR: clear: Resources Still in use at Exit!