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); StrFirstRemove(doc_e->tag, " ", st); for (i = 3; i >= 0; i--) { StrFirstRemove(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;