Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

以腳本加密密鑰進行編譯

在釋出遊戲時,匯出對話框中有可以使用 256 位元 AES 密鑰加密腳本的選項。通過該選項可以確保腳本不以純文字形式保存,且無法輕易地被一些腳本小子 (Script Kiddie) 輕鬆取得。當然,金鑰必須要保存在二進位檔中,但經過編譯、最佳化、並移除符號後,就需要花一點時間才能找到密鑰。

當然,金鑰需要儲存在二進位檔案中,但是經過編譯、優化、去除符號後,是需要花費一些精力才能找到的。

要加密腳本,需要以同一組密鑰來從原始碼編譯匯出腳本。

警告

如果你使用官方預編譯的匯出範本,是**不會**起作用的。要使用 PCK 加密,絕對**必須**自己編譯匯出範本。

警告

預設情況下,Android 匯出將資源直接儲存在 APK 檔案中,並且不受 PCK 加密的影響。若要在 Android 上使用 PCK 加密,請在匯出選項中啟用 APK 擴充

按部就班

  1. 產生十六進位格式的 256 位元 AES 密鑰。可以使用 這個服務 中的 AES-256-CBC 變體。

    或者,也可以通過 OpenSSL 來自行產生:

    openssl rand -hex 32 > godot.gdkey
    

    godot.gdkey 中的輸出應該類似:

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

    產生密鑰時可以不將輸出重新導向輸出至檔案,這樣可以最小化密鑰暴露的風險。

  2. 將該密鑰在用來編譯 Godot 的主控台中設為環境變數,如:

    export SCRIPT_AES256_ENCRYPTION_KEY="your_generated_key"
    
  3. 編譯 Godot 匯出樣板,並將該匯出樣板在匯出預設設定中設為自定匯出樣板。

  4. 在匯出預設設定中的 腳本 分頁設定加密密鑰:

    ../../../_images/encryption_key.png
  5. 為要加密的檔案/資料夾新增篩選器。 預設情況下,包含篩選器為空並且**不會加密任何內容**。

  6. 匯出專案。該遊戲現在應該會使用加密腳本來執行。

疑難排解

若遇到類似下方的錯誤,這代表加密密鑰沒有被正確包含到 Godot 建置中。這代表 Godot 在匯出時有加密腳本,但執行階段無法讀取。

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:103