针对某种加密程序,会对本地文件加密,并且会在文件头写入加密头信息(可以使用UE进行文件二进制查看),现在贴上一段代码:读取当前文件的加密头信息,判断该文件是否为加密文件。
int CLdScanFileDlg::FileDecryptStatus( wchar_t* v_strFile,int v_iStartIndex,int v_iReadCount,wchar_t* v_strContent)
{
USES_CONVERSION;
BYTE buff[MAX_BUFF_LENGTH] = {0};
string str = W2A(v_strFile);
FILE *fp;
fp = fopen(str.c_str(), "rb+");
if (fp == NULL)
{
m_strLog.Format(L"Judge File[%s] Decrypt Failed, GetLaseError:%d", v_strFile, GetLastError());
theApp.m_Errorlog.AddMsgLog(m_strLog, false);
return 3;
}
//"181B031A1510197C0A190E7C6F726C5F"
//5C5C5C5C5C5C5C1D390344FFFFFFFFFF
//!< 设置开始读取文件的位置
fseek(fp, v_iStartIndex, SEEK_SET);
//!< 读取文件长度
fread(buff, sizeof(BYTE), v_iReadCount, fp);
fclose(fp);
fp = NULL;
int iTemp;
char bValue[3]={0};
char hs[MAX_BUFF_LENGTH]={0};
theApp.m_Errorlog.WcharToChar(v_strContent,hs);
int icurrent=0;
for ( int i = 0 ; i < v_iReadCount; i++)
{
memcpy(bValue,hs+icurrent,2);
sscanf(bValue, "%x", &iTemp);
if(iTemp != buff[i])
{
return 2;
}
icurrent = icurrent + 2;
}
return 1;
}
v_strFile:代表文件全路径
v_iStartIndex:代表读取二进制文件开始位置
v_iReadCount:代表读取位数
v_strContent:代表加密头信息