U8 key[4][256]; U0 InitKey() { I64 i,j; for (i=0; i<4; i++) { for (j=0; j<256; j++) key[i][j]=j; for (j=0; j<255; j++) SwapU8(&key[i][j],&key[i][j+RandU32%(256-j)]); } } U0 LogScrambleFile(U8 *name) { CDoc *doc=DocRead(name,DOCF_PLAIN_TEXT|DOCF_NO_CURSOR); CDocEntry *doc_e=doc->head.next; I64 i; U32 num; U8 *st,*st2; "Scrambling: %s\n" ,name; while (doc_e!=doc) { if (doc_e->type_u8==DOCT_TEXT) { st=MAlloc(StrLen(doc_e->tag)+1); st2=MAlloc(StrLen(doc_e->tag)+1); StrFirstRem(doc_e->tag," ",st); for (i=3; i>=0; i--) { StrFirstRem(st,".",st2); num.u8[i]=key[i][Str2I64(st2)&255]; } Free(st); Free(st2); st=MStrPrint("%d.%d.%d.%d %s",num.u8[3],num.u8[2], num.u8[1],num.u8[0],doc_e->tag); Free(doc_e->tag); doc_e->tag=st; } doc_e=doc_e->next; } DocWrite(doc); DocDel(doc); } U0 WebLogScramble(U8 *files_find_mask) { CDirEntry *tmpde=FilesFind(files_find_mask,FUF_RECURSE|FUF_JUST_FILES), *tmpde1=tmpde; InitKey; while (tmpde) { LogScrambleFile(tmpde->full_name); tmpde=tmpde->next; } DirTreeDel(tmpde1); } U0 LogScrambleDemo() { U8 *dirname; Cd(__DIR__); dirname=DirCur; ST_WARN_ST "This will scramble all .log files in '%s'.\n\n",dirname; Free(dirname); if (AreYouSure) WebLogScramble("*.log*"); } LogScrambleDemo;