2010-03-05 4 views
7

Я использую классы RijndaelManaged и CryptoStream в C# для шифрования файлов. Прежде чем шифровать файлы, я хочу проверить, был ли файл уже зашифрован или нет.Как проверить, зашифрован ли файл с помощью AES (Rijndael)

Я пробовал использовать метод File.GetAttributes() для проверки шифрования, но он не работает.

Мне нужно несколько советов о том, как я могу проверить, уже ли файл зашифрован или нет.

ответ

9

Без каких-либо пользовательских заголовков единственный способ убедиться, что файл зашифрован, - это попытаться его расшифровать.

Если вы попытаетесь сжать файл, и он станет меньше, то он вряд ли будет зашифрован. Если существует неравномерное распределение значений байтов (включая обычный текст!), То вряд ли он будет зашифрован.

Эти эвристики зависят от правильного выполнения шифрования. Если AES применяется к файлу по одному блоку во времени, тогда в результате могут появиться паттеры, но поскольку вы используете CryptoStream, это не должно быть проблемой.

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

+0

Добавление пользовательского заголовка кажется хорошей идеей :) даст ему попробовать – Mako

0

Если файл зашифрован, он будет отображаться как поток случайных байтов. Вы можете:

  • Попытайтесь открыть файл и/или подтвердить, что он имеет ожидаемый формат (JPG, ZIP, что угодно). Если файл соответствует известному формату, то вы знаете, что он расшифрован.

  • Попытка расшифровки файла, если у вас есть ключ, а затем повторите предыдущий шаг. Если он теперь соответствует известному формату, вы знаете, что он (был?) Зашифрован.

1

Необходимо проверить файл и искать структуры или строки байтов, которых бы не было, если файл зашифрован. Вам понадобится отдельный тест для каждого типа файлов, с которыми вы имеете дело.

5

Предположим, у меня есть файл F, содержащий зашифрованного X, который является шифрование открытого текста Y с ключом Z.

Я хочу, чтобы убедиться, что открытый текст Y может определяться только тем, кто обладает как ключ Z и ключ Q. (я могу думать о ряде причин, почему я мог бы пожелать, чтобы это сделать.)

поэтому я хочу, чтобы зашифровать уже зашифрованный файл с ключом Q.

Вы хотите сказать, что ваша система хочет обнаружить, что F уже зашифрован, а затем отказывается зашифровать его ключом Q?

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

+0

Я согласен с вами в том, что множественное шифрование - хорошая идея. Но я просто хотел посмотреть, есть ли какой-либо способ, через который мы можем найти, был ли файл зашифрован или нет. – Mako

0

Установите свой метод шифрования bool, если файл может расшифровать, тогда метод возвращает true, который указывает, что файл зашифрован, в противном случае метод throw исключает и возвращает false, что указывает на то, что файл не может быть расшифрован или сказать, что файл не шифровать.

Смежные вопросы