Сделать файл MPQ недоступным для чтения - PullRequest
0 голосов
/ 24 июня 2010

Я использую шифрование в своей программе, которое расшифровывает файлы, если это необходимо, и шифрует их после того, как это сделано с файлом.Но мои файлы около 100 Мб, и их шифрование занимает больше минуты.

Мой вопрос: возможно ли сделать мой файл нечитаемым без шифрования всего файла?Так, например, просто зашифровать какой-то байт, или я не знаю, как это сделать.Мне нужно сократить время расшифровки.Большое спасибо!

Edit1: Извините, забыл.Файл, о котором я говорю, - это файлы MPQ, которые игра использует (вау) для чтения из нее файлов моделей, музыки и т. Д., Поэтому это не текстовый файл.Его можно открыть специальной программой (редактор MPQ).Я отредактировал некоторые файлы и создал свой собственный файл MPQ, и я хочу защитить его от других пользователей, чтобы открыть его с помощью редактора MPQ.Моя программа тоже может открывать файлы mpq.Но файл mpq создается с помощью этого редактора mpq.Я просто хочу сделать это неразборчиво для редактора mpq.И если моя программа будет использовать его, она должна расшифровать его, и если моя программа закончила работу с файлом MPQ, она должна зашифровать его еще раз, чтобы другие могли его отредактировать.,Есть название программы world of warcraft.Он читает файлы игр из файлов MPQ, файл MPQ разрабатывается Wow (Blizzard Co), но может открываться некоторыми программами, редакторами.Я получил отредактированный файл MPQ (заменил музыку) и загрузил его на свой сервер.Моя программа загружает ее в папку с игроками других игроков, и они получат эту игру изменения, как я :) Они также услышат другие музыкальные произведения.(просто пример.) Но я не хочу, чтобы они редактировали / или видели мой MPQ-файл в какой-либо программе-редакторе, поэтому я ввел простое шифрование, дешифрование в мою программу.Мой файл MPQ загружен в зашифрованном виде на мой сервер.Когда они запускают игру, моя программа расшифровывает файл (да, они смогут редактировать его сейчас, но они не знают этого: P, его базовая безопасность), поэтому игра повторно распознает файл MPQ и загрузит егос изменениями внутри него.Когда игровая программа закрывается, моя программа зашифровывает патч, поэтому он снова не будет читаться.Я надеюсь, что вы понимаете процесс.Дело в том, что мой файл MPQ (патч) имеет размер ~ 100 МБ.Это означает, что их шифрование / дешифрование занимает ~ 1 минуту.И это то, что я хочу заменить, метод шифрования.Нужно зашифровать его каким-нибудь лучшим способом и расшифровать, когда это необходимо

Ответы [ 8 ]

1 голос
/ 24 марта 2011

Читайте о формате MPQ здесь: http://www.zezula.net/en/mpq/mpqformat.html

Таким образом, создание архива без файла "(listfiles)" сделает практически невозможным его открытие.

1 голос
/ 24 июня 2010

Считайте произвольное количество байтов с начала и добавьте их в конец, затем для обратного перехода - назад.Это должно помешать приложению распознавать файл как допустимый тип.Это не сделает текст в файле нечитаемым.

1 голос
/ 24 июня 2010

Если под нечитаемым вы подразумеваете, что данные не будут обычным текстом, вы можете использовать двоичная сериализация / десериализация .

0 голосов
/ 24 июня 2010

Я ничего не знаю о файлах mpq, но мой первый вопрос: «Как редактор распознает, что это файл mpq?».Если, например, в первых 3 байтах есть определенное значение, просто измените эти байты, и редактор потерпит неудачу.Измените их обратно, и вы можете прочитать это.Вуаля.Если какой-то другой механизм, та же логика.

Дело в том, что файл вообще не нужно шифровать - просто настроен так, что редактор mpq не распознает его как действительный файл для открытия.

0 голосов
/ 24 июня 2010

Используя DES (64-бит, что быстрее, чем rijndael), мне требуется менее 5 секунд для обработки файла 112 Мб. Вы пробовали это?

Тем не менее, вы дали мне забавную идею: Зашифруйте половину блока вашего входного файла, а другую половину оставьте открытым текстом. (Вы получите 2 файла ... и вы должны забыть о безопасности, очевидно)

Это сокращает время обработки на ~ 40%, и вы можете отрегулировать соотношение блоков зашифрованного / открытого текста, чтобы получить время:

        private static void EncryptData(String inName, String outName, byte[] desKey, byte[] desIV)
    {  
        //Create the file streams to handle the input and output files.
        FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
        FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
        FileStream foutclear = new FileStream(outName + ".clear", FileMode.OpenOrCreate, FileAccess.Write);
        fout.SetLength(0);

        //Create variables to help with read and write.
        byte[] bin = new byte[4096]; //This is intermediate storage for the encryption.
        long rdlen = 0;              //This is the total number of bytes written.
        long totlen = fin.Length;    //This is the total length of the input file.
        int len;                     //This is the number of bytes to be written at a time.

        System.Security.Cryptography.SymmetricAlgorithm des = SymmetricAlgorithm.Create("DES"); // Using DES      
        CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write);
        Console.WriteLine("Encrypting...");

        //Read from the input file, then encrypt and write to the output file.
        while (rdlen < totlen)
        {
            len = fin.Read(bin, 0, 4096);
            encStream.Write(bin, 0, len);
            rdlen = rdlen + len;
            len = fin.Read(bin, 0, 4096);
            foutclear.Write(bin, 0, len);
            rdlen = rdlen + len;
        }

        encStream.Close();
        foutclear.Close();
        fout.Close();
        fin.Close();        
    }
0 голосов
/ 24 июня 2010

Вы можете попробовать использовать TripleDESCryptoServiceProvider.

Шифрование текста с использованием TripleDESCryptoServiceProvider | C # Фрагмент | SnippetBank.Net

0 голосов
/ 24 июня 2010

Вы можете использовать шифрование плохого человека, используя xor

        int key = 83847; // whatever value you want
        string str = "This is my file";

        // "Encrypt"
        var sb = new StringBuilder(str.Length);
        foreach (var ch in str)
        {
            sb.Append((char)(ch ^ key));
        }

        Console.WriteLine(sb.ToString()); // Garbled text

        // "Decrypt"
        var sbReversed = new StringBuilder(str.Length);
        foreach (var ch in sb.ToString())
        {
            sbReversed.Append((char)(ch ^ key));
        }

        Console.WriteLine(sbReversed.ToString()); // "This is my file"
0 голосов
/ 24 июня 2010

если это просто текст - нет. У вас будет плохой характер, но он все равно будет читабельным. Если это пользовательский двоичный формат, людям все равно придется перепроектировать файл, так что в этом нет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...