如何从加密文件(即)获取文件类型?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 之间的秘密字节。
如果我必须先解密文件,我怎么能在不使用详尽搜索找到shift 键的情况下解密它?
我不是在谈论获得.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
files 都给我一个 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);
但它只是返回乱码,我无法确定文件类型的差异。