针对某种加密程序,会对本地文件加密,并且会在文件头写入加密头信息(可以使用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:代表加密头信息