#include <iostream>
#include <string>
#include <locale.h>
#include<strstream>
#include <cstdio>
#include <stdlib.h>
#include <bitset>
#include <string.h>
#include <stdio.h>
using namespace std;
const int n = 51;
char fi[2];
char la[2];
char shifr(char fi1, char fi2, int z)//z - секретный ключ
{
//char fi[2];
fi[0] = fi1;
fi[1] = fi2;
//char la[2];
for (int l = 0; l < 2; l++)
{
unsigned char last;//fi - начальный вид символа, la - зашифрованный
unsigned char ch1;
unsigned char ch2;// два буфера для сдвига влева и сдвига вправо
int gm;
gm = rand();
ch1 = fi[l];
ch2 = fi[l];
ch1 = (ch1 >> 1) & 0b11111100;
ch2 = (ch2 << 7) & 0b00000011;
ch1 |= ch2;
last = ch1 ^ gm;
la[l] = last;
//return la[l];
}
//string LA = la;
//return LA;
return la[2];
}
char deshifr(char la1, char la2, int z)
{
//char la[2];
la[0] = la1;
la[1] = la2;
//char fi[2];
for (int l = 0; l < 2; l++)
{
char ch1;
char ch2;// два буфера для сдвига влево и сдвига вправо
int gm;
gm = rand();
ch1 = la[l] ^ gm;
ch2 = ch1;
ch1 = (ch1 << 1) & 0b00111111;
ch2 = (ch2 >> 7) & 0b11000000;
ch1 |= ch2;
fi[l] = ch1;
}
//string FI = fi;
//return FI;
return fi[2];
}
int main()
{
int i; // номер символа в строке
char str[n];
int key; // секретный ключ
int keyr; // ключ для расшифровки
char buf[2]; //string buf;
char rbuf[2]; //string rbuf;
//buf.clear();
//if (buf.empty())
cout << "vvedite to chto hotite zashifrovat: ";
cin.getline(str, n);
cout << "vvedite secretniy kluch: ";
cin >> key;
int a = strlen(str);
srand(key);
int ost = 0;
//int extr= 50 - a; //лишние символы
for (int j = a; j < n; j++)
{
str[j] = 'o';
}
char sim[n];
for (i = 0; i < (n - 2); i += 2) // отделяем на шифровку 4 байта
{
shifr(str[i], str[i + 1], key);
buf[i] = la[0];
buf[i + 1] = la[1];
}
cout << "vvedite kluch dlya rashifrovki: ";
cin >> keyr;
srand(keyr);
for (i = 0; i < n; i++) // было не а , а n
{
sim[i] = buf[i];
}
for (i = 0; i < (n - 2); i += 2) // n-4
{
deshifr(sim[i], sim[i + 1], keyr);
rbuf[i] = fi[0];
rbuf[i + 1] = fi[1];
}
for (i = 0; i < a; i++)
{
cout << rbuf[i];
}
//cout << rbuf;
cout << endl;
system("pause");
}