Я использую классы 'RijndaelManaged' и 'CryptoStream' в C# для шифрования файлов. Прежде, чем зашифровать файлы, я хочу проверить, шифруется ли файл уже или нет.
Я пытался использовать File.GetAttributes()
метод для проверки на Шифрование, но это не работает.
Мне нужны некоторые подсказки относительно способов, которыми я могу проверить, шифруется ли файл уже или нет.
Без каких-либо настраиваемых заголовков единственный способ быть абсолютно уверенным в том, что файл зашифрован, - это попытаться его расшифровать.
Если вы попытаетесь сжать файл, и он станет меньше, то вероятность его шифрования крайне мала. Если имеется неравномерное распределение байтовых значений (включая простой текст!), То шифрование маловероятно.
Эта эвристика зависит от правильного выполнения шифрования. Если AES применяется к файлу по одному блоку, в результате могут появиться шаблоны, но, поскольку вы используете CryptoStream, это не должно быть проблемой.
Если ваш собственный код всегда будет использоваться для шифрования и дешифрования файлов, вам следует подумать о добавлении настраиваемого заголовка, указывающего, что это зашифрованный файл.
Предположим, у меня есть файл F, содержащий шифротекст X, который является шифрованием открытого текста Y с помощью ключа Z.
Я хочу убедиться, что открытый текст Y может быть определен только тем, кто владеет ключом Z и ключом Q. (Я могу придумать ряд причин, по которым я могу захотеть сделать это.)
Поэтому я хочу зашифровать уже зашифрованный файл ключом Q.
Вы хотите сказать, что ваша система хочет обнаружить, что F уже зашифрован, а затем отказаться шифровать его ключом Q?
Это кажется плохой идеей. Я могу захотеть зашифровать файл ключом Q независимо от того, зашифрован он уже ключом Z или нет.
Вы должны проверить файл и найти структуры или байтовые строки, которых не было бы, если бы файл был зашифрован. Вам понадобится отдельный тест для каждого типа файла, с которым вы имеете дело.
Если файл зашифрован, он будет отображаться как поток случайных байтов. Вы можете:
Попытаться открыть файл и / или подтвердить, что он имеет ожидаемый формат (JPG, ZIP и т. Д.). Если файл соответствует известному формату, значит, он расшифрован.
Попытайтесь расшифровать файл, если у вас есть ключ, затем повторите предыдущий шаг. Если теперь он соответствует известному формату, значит, вы знаете, что он (был?) Зашифрован.