Как получить тип файла с использованием C#
из зашифрованного файла (то есть file.enc
)?Как получить тип файла из зашифрованного файла?
Метод шифрования: сдвиг Cipher Z
Сдвиг Шифр:
У я = (Х я + к)% 256
Х i = (Y i - к)% 256
Где:
Х я, г = 1: п, является входом в простых байтах.
Y i, i = 1: n, - это байты выходного шифра.
к являются ключом сдвига, который является секретными байтами в диапазоне от 1 до 255.
Если я должен расшифровать файл первым, как я мог расшифровать его без использования перебора найти сдвиг ключ?
Я не говорю о получении .enc
, как я уже могу это сделать. Я не могу определить, как файл был до шифрования, например .doc
, .xls
, .pdf
, .jpg
, или .wav
Типы файлов.
То, что я пробовал:
byte[] byteArray = File.ReadAllBytes(openFileDialog1.FileName);
// Mean
double mean = 0;
for (int i = 0; i < byteArray.Length; i++)
{
mean += byteArray[i];
}
mean = mean/byteArray.Length;
txtMean.Text = mean.ToString("#.000");
// Median
byteArray.ToList().Sort();
int median = byteArray[(int)Math.Floor((decimal)(byteArray.Length/2))];
txtMedian.Text = median.ToString();
// Mode
var groups = byteArray.GroupBy(g => g);
int maxCount = groups.Max(g => g.Count());
int mode = groups.First(g => g.Count() == maxCount).Key;
txtMode.Text = mode.ToString();
// Standard Deviation
double standardDeviation = byteArray.Select(value => (value - mean) * (value - mean)).Sum();
standardDeviation = Math.Sqrt(standardDeviation/byteArray.Length);
txtStandardDeviation.Text = standardDeviation.ToString("#.000");
// Entropy (I don't know how to get this part.)
int entropy = 0;
txtEntropy.Text = entropy.ToString();
Таким образом, из этого вы можете видеть, что я взять файл, прочитать все байты файла и найти значения по mean
, median
, mode
, standard deviation
и entropy
.
Кстати, я не знаю, как найти значение энтропии для файла, есть ли какая-то формула для этого или, может быть, встроенного метода C#? Я искал, но ничего не нашел.
Я думал, используя значение mode
будет иметь возможность определить тип файла, а она только определяет .pdf
файлы как .pdf
файлы имеют режим 48.
.doc
, .xls
, .docx
, .xlsx
, .jpg
, и .wav
файлы все дают мне режим 0.
Я также пытался читать байт, используя следующую страницу (ы):
ASCII Коды символов Диаграмма 1 - https://msdn.microsoft.com/en-us/library/60ecse8t(v=vs.80).aspx ASCII Коды символов Диаграмма 2 - https://msdn.microsoft.com/en-us/library/9hxt0028(v=vs.80).aspx
, используя этот код:
string str = Encoding.ASCII.GetString(byteArray).Substring(0, 256);
но он просто возвращает тарабарщину, в которой я не могу определить разницу в типах файлов.
_whole point_ of encryption - сделать невозможным прочитать что-либо об открытом тексте. – SLaks
@SLaks - Правда, но в этом случае это простое шифрование с использованием Shift Cipher. Я могу дешифровать файл сначала, используя исчерпывающий поиск, чтобы найти ключ переключения, но есть лучший способ сделать это, и именно там у меня возникает эта проблема. – Khaltazar
@ArtjomB. - Хорошо, я отредактировал вопрос, включив в него метод шифрования и часть ключа смены без использования исчерпывающего поиска. – Khaltazar