2015-05-29 6 views
1

Как получить тип файла с использованием 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); 

но он просто возвращает тарабарщину, в которой я не могу определить разницу в типах файлов.

+2

_whole point_ of encryption - сделать невозможным прочитать что-либо об открытом тексте. – SLaks

+0

@SLaks - Правда, но в этом случае это простое шифрование с использованием Shift Cipher. Я могу дешифровать файл сначала, используя исчерпывающий поиск, чтобы найти ключ переключения, но есть лучший способ сделать это, и именно там у меня возникает эта проблема. – Khaltazar

+0

@ArtjomB. - Хорошо, я отредактировал вопрос, включив в него метод шифрования и часть ключа смены без использования исчерпывающего поиска. – Khaltazar

ответ

1

Если это «Caesar Shift», то вы просто сбегаете по алфавиту, пробуя каждый возможный сдвиг, их всего 25.

NBCM CM UH YRUGJFY 
nbcm cm uh yrugjfy 
ocdn dn vi zsvhkgz 
pdeo eo wj atwilha 
qefp fp xk buxjmib 
rfgq gq yl cvyknjc 
sghr hr zm dwzlokd 
this is an example 
uijt jt bo fybnqmf 
vjku ku cp gzcorng 
wklv lv dq hadpsoh 
xlmw mw er ibeqtpi 
ymnx nx fs jcfruqj 
znoy oy gt kdgsvrk 
aopz pz hu lehtwsl 
bpqa qa iv mfiuxtm 
cqrb rb jw ngjvyun 
drsc sc kx ohkwzvo 
estd td ly pilxawp 
ftue ue mz qjmybxq 
guvf vf na rknzcyr 
hvwg wg ob sloadzs 
iwxh xh pc tmpbeat 
jxyi yi qd unqcfbu 
kyzj zj re vordgcv 
lzak ak sf wpsehdw 
mabl bl tg xqtfiex 
nbcm cm uh yrugjfy 
+0

Нет, это Shift Cipher с Z , поэтому я связал таблицы кода символов ASCII. – Khaltazar

+0

Тогда у вас есть только 256 возможностей попробовать. Это 2^8, который не обеспечивает никакой безопасности от атаки грубой силы. Просто попробуйте все возможности. – rossum

+0

Можете ли вы отредактировать свой ответ, чтобы я мог оценить ваш ответ? Ваш ответ оказался правильным. В итоге я обнаружил ключ перехода от проб и ошибок. Мне пришлось сначала дешифровать байты, чтобы найти тип файла, чтобы вы были правы. Я правильно ответил на ваш ответ, но я бы хотел изменить свой рейтинг на +1, поэтому, если вы отредактируете свой ответ и сохраните редактирование, я смогу изменить рейтинг для вас. – Khaltazar

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