Вспомнилась идиотская совершенно задача. Чтобы строки не светились в файле их обфусцируют, XOR-ом как правило. Даже ЦРУ таким пользуется, есть у них препроцессор
Marble, страшный как никарагуанские контрас. Остальные обычно пользуются шаблонами. А в случае с Си, в котором нулевой байт обозначает конец строки, возникает смешная проблема - если байт ключа совпадает с байтом открытого текста, то зашифрованная строка обрежется. И приходится отказываться от
strlen() и где-то хранить длину строки. А можно просто сгенерировать ключ, так чтобы символы не совпадали ни в одной из возможных позиций:
int n = 8;
char K[n + 1];
unsigned char key[n][256];
for (j = 0; j < n; j++)
for (i = 0; i < 256; i++)
key[j][i] = i;
for (i = 0; i < c; i++)
for (j = 0; j < l[i]; j++)
key[j % n][s[i][j]] = 0;
for (k = 0; k < n; k++) {
for (i = 0, j = 0; i < 256; i++)
if (isprint(key[k][i]))
key[k][j++] = key[k][i];
if (j < 1) {
printf("Failed at %d\n", k);
return 2;
}
K[k] = key[k][random() % j];
}
K[k] = 0;
printf("KEY IS %s\n", K);