XOR 是解决这个问题的一个非常简单但非常有效的解决方案。
在 GML 中:
/// script load_xor_file
// arguments: filename
// Prerequisite: Change the "key=" line to your chosen key
var key, kl, file, len, str, i;
key = "YOUR SECRET KEY HERE";
kl = string_length(key);
file = file_bin_open(argument0,0);
len = file_bin_size(file);
str = "";
for( i=0; i<l; i+=1) {
str += chr(file_bin_read_byte(file) ^ ord(string_char_at(key,i mod kl + 1)));
}
file_bin_close(file);
return str;
/// script save_xor_file
// arguments: filename, data
// Prerequisite: Change the "key=" line to the SAME KEY as in load_xor_file
var key, kl, file, len, i;
key = "YOUR SECRET KEY HERE";
file = file_bin_open(argument0,1);
file_bin_rewrite(file);
len = string_length(argument1);
for( i=0; i<len; i+=1) {
file_bin_write_byte(file, chr(string_char_at(argument1,i+1)) ^ chr(string_char_at(key,i mod kl + 1)));
}
file_bin_close(file);
我自己从未使用过 RPG Maker,但我想为它编写类似的代码不会太难。
几个注意事项,它不能保证安全。可以反编译 Game Maker EXE 并显示密钥,或者如果密钥不安全,则可以直接破坏密钥。
一个好的、安全的密钥很长,因为破解加密依赖于密钥自身的重复。如果密钥是被加密数据长度的一半以上,那么破解加密几乎是不可能的,除非文件的内容是可预测的(例如,我可以假设文件包含玩家的名字)和得分,所以这些可以用于已知明文攻击)。
总体而言,这不能保证文件的安全性,但对于您的目的来说应该是非常合适的。
此外,由于您要求可能的 PHP 解决方案:
<?php
function load_xor_file($filename) {
$key = "YOUR SECRET KEY HERE";
$in = file_get_contents($filename);
$keyrep = str_repeat($key,ceil(strlen($in)/strlen($key)));
return $in ^ $keyrep;
}
function save_xor_file($filename,$data) {
$key = "YOUR SECRET KEY HERE";
$keyrep = str_repeat($key,ceil(strlen($data)/strlen($key)));
file_put_contents($filename,$data ^ $keyrep);
}
?>
PS。我知道这个问题已经相当老了,但我只是随机浏览 Game Maker 标签:p