Доброго времени суток. Помогите решить одну проблему
у меня есть программа следующего вида:
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>
#define k "jf1ay9238x0ax0"
char f1(char a);
int a1(int a);
int main()
{
srand(time(0));
printf("Enter path:");
fflush(stdout);
char p[64];
scanf("%s", p);
char c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
FILE* f = fopen(p, "rb");
if (f == NULL) {
printf("Error opening file");
getch();
exit(-3);
}
char m[64];
fread(&m, sizeof(char), 64, f);
fclose(f);
printf("%s\n", p);
printf("Cipher?(Y/n):");
fflush(stdout);
char r;
scanf("%c", &r);
do {
c = getchar();
} while (c != '\n' && c != EOF);
char ot = r;
if (ot == 'Y') {
char s = 0;
for (int i = 0; i < 64; ++i) {
s ^= m[i];
}
for (int i = 0; i < 63; ++i) {
m[i] ^= (m[i + 1] ^ s^r^i ^ ((0xf) << 4) ^ ((i % 2) << 7));
m[i] = f1(m[i]);
}
m[63] ^= s;
FILE* f = fopen("out.txt", "wb");
fputc(s, f);
fwrite(m, sizeof(char), 64, f);
fclose(f);
}
return 0;
}
char f1(char a)
{
char ss = 0xd;
static int t = 0;
int b = a1(rand()) % 0xffff;
b <<= 4;
b ^= (k[(t++) % ss] >> 4);
b <<= 4;
b ^= (k[(t++) % ss]);
a ^= (char)b;
return a;
}
int a1(int a) {
if (a < 0)
return (-a);
else
return a;
}
Её суть в том, что она читает побайтно файл с текстом, а затем хорит его по определенному алгоритму и записывает в другой файл.
В общем суть моего вопроса:
помогите написать реверсирующую процедуру, т.е. чтобы подавая на вход зашифрованное сообщение получался исходный читаемый текст.
Всю голову себе уже исколупал, 10 раз прошел по алгоритму, но все равно где-то я что-то упускаю (может сдвиг может еще что)
И да, я знаю, что 2х xor дает исходный результат.
Спасибо большое заранее тем, кто откликнется
c, xor