SHARE
TWEET

Untitled

a guest Oct 16th, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "stdafx.h"
  2. #include <locale.h>
  3. #include <iostream>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8. int const MAX_SYMBOLS=1000; //Максимальное количество символов
  9.  
  10. void Encrypted(unsigned char *data, unsigned char *rezult) //Функция шифрования данных
  11. {
  12.     unsigned char gamma, bit, maska=0x80;
  13.     int i=0;
  14.     while(data[i])
  15.     {
  16.         gamma=rand(); //Генерируем гамму с помощью генератора псевдослучайных чисел
  17.         rezult[i] = data[i] ^ gamma; //Накладываем гамму на исходный блок данных, используя операцию поразрядного исключающего "ИЛИ"
  18.         bit = rezult[i] & maska; //Накладываем маску, чтобы выделить отдельные биты
  19.         bit>>=7;
  20.         rezult[i] = rezult[i] << 1; //Выполняем операцию поразрядного циклического сдвига на 1 бит влево
  21.         rezult[i] |= bit;
  22.         i++;
  23.     }
  24.     rezult[i] = '\0';
  25. }
  26.  
  27. void Decrypted(unsigned char *data, unsigned char *rezult) //Функция дешифрования данных
  28. {
  29.     unsigned char gamma, bit, maska=0x01;
  30.     int i=0;
  31.     while(data[i])
  32.     {
  33.         rezult[i] = data[i];
  34.         bit = rezult[i] & maska; //Накладываем маску, чтобы выделить отдельные биты
  35.         rezult[i] = rezult[i] >> 1; //Выполняем обратную операцию поразрядного циклического сдвига на 1 бит вправо для расшифровки данных
  36.         bit<<=7;
  37.         rezult[i] |= bit;
  38.         gamma = rand(); //Генерируем гамму с помощью генератора псевдослучайных чисел
  39.         rezult[i] = rezult[i] ^ gamma; //Накладываем гамму на зашифрованный блок данных блок данных, используя операцию поразрядного исключающего "ИЛИ"
  40.         i++;
  41.     }
  42.     rezult[i] = '\0';
  43. }
  44.  
  45.  
  46. void main()
  47. {
  48.    
  49.     setlocale(LC_ALL, "rus");
  50.     unsigned char input[MAX_SYMBOLS], encrypted_data[MAX_SYMBOLS], decrypted_data[MAX_SYMBOLS];
  51.     /*
  52.     input - исходные данные
  53.     encrypted_data - зашифрованные данные
  54.     decrypted_data - расшифрованные данные
  55.     */
  56.     cout << "Введите исходные данные: ";
  57.     gets((char *)input); //Ввод исходных данных
  58.     int key; //Секретный ключ
  59.     cout << "key=";
  60.     cin >> key; //Ввод секретного ключа
  61.     cout << endl;
  62.     srand(key); //Инициализация секретного ключа
  63.     Encrypted(input,encrypted_data); //Вызываем функцию шифрования данных
  64.     cout << "Зашифрованные данные:" << endl;
  65.     cout << encrypted_data << endl; //Вызов на экран зашифрованных данных
  66.     cout << endl;
  67.     cout << "key=";
  68.     cin >> key; //Ввод секретного ключа
  69.     cout << endl;
  70.     srand(key); //Повторная инициализация секретного ключа
  71.     cout << "Расшифрованные данные:" << endl;
  72.     Decrypted(encrypted_data,decrypted_data); //Вызываем функцию расшифрования данных
  73.     cout << decrypted_data << endl; //Вызов на экран Расшифрованных данных
  74.     _getch();
  75. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top