include iostream include string include locale include strstream inclu

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#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) & 0b01111111;
ch2 = (ch2 << 7) & 0b10000000;
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) & 0b01111111;
ch2 = (ch2 >> 7) & 0b10000000;
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");
}