暗号化されたファイル (つまり)を使用してファイルの種類を取得するにはどうすればよいですか?C#
file.enc
暗号方式:シフト暗号 Z 256
シフト暗号暗号化:
Y i = (X i + k) % 256
X i = (Y i - k) % 256
どこ:
X i , i = 1 : n は、プレーン バイト単位の入力です。
Y i , i = 1 : n は、出力暗号バイトです。
k は、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
値を使用するとファイルの種類を判断できると思いましたが、ファイルのモードは 48 であるため、ファイル.pdf
のみを判断します。.pdf
.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-米国/図書館/9hxt0028(v=vs.80).aspx
このコードを使用して:
string str = Encoding.ASCII.GetString(byteArray).Substring(0, 256);
しかし、ファイルタイプの違いを判断できない意味不明なものを返すだけです。