我的游戏有80多个等级,只有一个失败了盐渍的sha1散列。原因是在级别文件中添加了salt而不是它的结尾。
问题仅出现在64位Ubuntu 16.04中,适用于Windows。它发生在每次发射时,每次都插入到同一位置。
级别文件是2行,第一行是级别文件,第二行是哈希。所以我得到第一行并加盐。但问题仍然与单行文件相同。
这是最小化的代码:
int main() {
std::ifstream inf("level.txt");
std::string lvl_file;
std::getline(inf, lvl_file);
inf.close();
lvl_file += "MYSECRETSALT"; // lvl_file.append(..) also has same issue
std::cout << lvl_file << std::endl;
}
此代码打印整个级别文件,但MYSECRETSALT进入它的内部而不是它的结尾。如果我在追加之前打印lvl_file,它会很好地打印而不会遗漏任何内容。
// IT SHOULD BE LIKE
...[0,26],[1,61]],"decor_2":[[0,25000]],"decor_3":[[0,25000]],"tiles_3":[[0,25000]]},"ghosts":[],"turrets":[]}MYSECRETSALT
// BUT IT PRINTS LIKE THIS
...[0,26],[1,61]],"decor_2":[[0,25000]],"decorMYSECRETSALT0]],"tiles_3":[[0,25000]]},"ghosts":[],"turrets":[]}
级别文件位于以下位置:https://hastebin.com/ayeduwucid.php
将文件硬编码到stringstream中可以正常工作。
std::stringstream inf;
inf << R"json(..)json";
答案 0 :(得分:0)
该文件是用Windows编写的,它带到\n
的第二行。当我用十六进制检查时,它实际上会导致\r\n
导致这些问题。