Encrypting save games
The class FileAccess can open a file at a location and read/write data (integers, strings and variants). It also supports encryption. To create an encrypted file, a passphrase must be provided, like this:
var f = FileAccess.open_encrypted_with_pass("user://savedata.bin", FileAccess.WRITE, "mypass")
f.store_var(game_state)
var f = FileAccess.OpenEncryptedWithPass("user://savedata.bin", (int)FileAccess.ModeFlags.Write, "mypass");
f.StoreVar(gameState);
This will make the file unreadable to users, but will still not prevent them from sharing savefiles. To solve this, use the device unique id or some unique user identifier, for example:
var f = FileAccess.open_encrypted_with_pass("user://savedata.bin", FileAccess.WRITE, OS.get_unique_id())
f.store_var(game_state)
var f = FileAccess.OpenEncryptedWithPass("user://savedata.bin", (int)FileAccess.ModeFlags.Write, OS.GetUniqueId());
f.StoreVar(gameState);
Note that OS.get_unique_id() does not work on UWP or HTML5.
NOTE