Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement