我一直致力于2个项目,一个用Game Maker 8制作的程序和一个用RPG Maker XP制作的RPG,我想做的一件事就是让RPG Maker XP阅读“得分档案”来自Game Maker,得分文件本身只是一个基本的文本文件,Game Maker Program和RPG Maker XP Game都会读取这些文件以收集数据。
我面临的问题是,如果有人要在记事本这样的文本编辑器中打开这个乐谱文件,他们可能会更改数据并“作弊”,所以我一直在尝试做的是加密文件,这样一开始瞥了一眼,这是不可读的,有Game Maker和RPG Maker XP解密文件,从中提取所有数据然后加密它
然而我已经遇到了障碍,我在Game Maker工作的.dll似乎以不同方式加密/解密得分文件,我通过创建2个相同的.txt文件来测试.dll,其中包含相同的文本并具有然后在2个程序中加密,内容完全不同,这意味着如果我尝试解密在Game Maker中加密的RPG Maker XP中的文件,它将失败
我已经尝试过其他.dll但它们似乎不适用于RPG Maker XP,据我所知,RGSS是一类Ruby,这意味着任何可以在Ruby中工作的代码都可以在RPG Maker XP中工作Ruby和Game Maker的GML,C是2可以使用的通用语言.dll for
所以这就是我要问的,是否有.dll,脚本,代码等。我可以用来保护我的文本文件中的数据不被编辑到Game Maker和RPG Maker XP之外
特洛伊“Memor-X”记忆PS:如果有一种方法也可以在.php程序中运行,那也很好,但如果不能
我可以解决这个问题答案 0 :(得分:0)
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