/******************************************************************** * * 描述: 对密钥进行处理,并构造矩阵 * * 参数: * key1 密钥1 * key2 密钥2 * * 返回值: * ********************************************************************/ void setKeys(const char* key1, const char* key2) { char* tmpkey1 = delete_repeate(key1); char* tmpkey2 = delete_repeate(key2); char* key1_uppercase = strChange(tmpkey1, 0); char* key2_uppercase = strChange(tmpkey2, 0); free(tmpkey1); free(tmpkey2); tmpkey1 = NULL; tmpkey2 = NULL; char* key1_uppercase_source = setSource(uppercase_source, key1_uppercase); char* key2_uppercase_source = setSource(uppercase_source, key2_uppercase); free(key1_uppercase); free(key2_uppercase); key1_uppercase = NULL; key2_uppercase = NULL; setMatrix(lowercase_source, matrix); setMatrix(key1_uppercase_source, matrix_right_up); setMatrix(key2_uppercase_source, matrix_left_down); key1_uppercase_source = NULL; key2_uppercase_source = NULL; }
//根据的绝路路径计算文件的md5如:D:\Downloads\d3.ppt CString ValueMD5(CString file) { MD5VAL val; CString result; TCHAR chtmp[1024]; file = strChange(file); FILE *fp = _wfopen(file, L"rb"); if(fp) { val = md5File(fp); swprintf(chtmp,1024, L"%08x%08x%08x%08x", conv(val.a), conv(val.b), conv(val.c), conv(val.d)); fclose(fp); } result.Format(L"%s", chtmp); return result; }
/******************************************************************** * * 描述: 对给定的文件进行处理(只留下字符,全部改为小写字符),并在中间插入消息 * * 参数: * sourcename 要处理的文件的文件名 * destname 处理后的文件的文件名 * msg 要插入文件中的信息 * * 返回值: * ********************************************************************/ void handleText(const char* sourcename, const char* destname, const char* msg) { FILE* sourcefp; FILE* tmpfp; FILE* destfp; const char* tmp = "tmp";//中间文件的文件名 fopen_s(&sourcefp, sourcename, "r"); fopen_s(&tmpfp, tmp, "w+"); fopen_s(&destfp, destname, "w"); char ch = NULL; while ((ch = fgetc(sourcefp)) != EOF) { if (ch >= 'a'&&ch<'z' || ch>'A'&&ch < 'Z') { ch = tolower(ch); fputc(ch, tmpfp); } } int textsize = ftell(tmpfp); fseek(tmpfp, 0, SEEK_SET); srand(0); int offset = rand() % textsize;//插入信息的位置 int charsize = sizeof(char); int buffercount = 1024;//buffer可以存放1024个char int buffersize = buffercount*charsize; int offsetsize = charsize*offset; int n1 = offsetsize / buffersize;//要读n次 int offsetdelt = offsetsize % buffersize;//读到offset处的最后一次要读的数据的大小 char* buffer = (char*)malloc(buffersize); for (int i = 0; i < n1; i++) { fread_s(buffer, buffersize, charsize, buffercount, tmpfp); fwrite(buffer, charsize, buffercount, destfp); } fread_s(buffer, buffersize, charsize, offsetdelt, tmpfp); fwrite(buffer, charsize, offsetdelt, destfp); char* lowermsg = strChange(msg, 1); fwrite(lowermsg, charsize, strlen(lowermsg), destfp); free(lowermsg); lowermsg = NULL; int left = textsize - offset; int leftsize = left*charsize; int n2 = leftsize / buffersize; int leftdelt = leftsize % buffersize; for (int i = 0; i < n2; i++) { fread_s(buffer, buffersize, charsize, buffercount, tmpfp); fwrite(buffer, charsize, buffercount, destfp); } fread_s(buffer, buffersize, charsize, leftdelt, tmpfp); fwrite(buffer, charsize, leftdelt, destfp); free(buffer); fclose(sourcefp); fclose(tmpfp); fclose(destfp); remove(tmp); buffer = NULL; sourcefp = NULL; tmpfp = NULL; destfp = NULL; }