Advertisement
saleks28

kmzi3_main

Jan 29th, 2020
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.08 KB | None | 0 0
  1. #include "feistel.h"
  2. #include "main.h"
  3. #include <time.h>
  4.  
  5. std::string GetFileName()
  6. {
  7.      std::string bufferString;
  8.      std::cout << "Enter name of file: ";
  9.      std::cin >> bufferString;
  10.      return bufferString;
  11. }
  12.  
  13. std::vector<uint8_t> ReadFile()
  14. {
  15.      std::vector<uint8_t> plainText;
  16.      std::ifstream fileStream(GetFileName(), std::ios::binary);
  17.  
  18.      while (!fileStream)
  19.      {
  20.           std::cout << "Wrong file" << std::endl;
  21.           fileStream.open(GetFileName());
  22.      }
  23.  
  24.      fileStream.seekg(0, std::ios::end);
  25.      plainText.reserve(static_cast<size_t>(fileStream.tellg()));
  26.      fileStream.seekg(0, std::ios::beg);
  27.  
  28.      fileStream >> std::noskipws;
  29.  
  30.      for (size_t i = 0; i < plainText.capacity(); ++i)
  31.      {
  32.           unsigned char sym;
  33.           fileStream >> sym;
  34.           plainText.push_back(sym);
  35.      }
  36.      
  37.      fileStream.close();
  38.  
  39.      return plainText;
  40. }
  41.  
  42.  
  43.  
  44. int main()
  45. {
  46.      time_t startTime, endTime;
  47.      
  48.      std::cout << "Plain text 1" << std::endl;
  49.      const std::vector<uint8_t>  plainText1 = ReadFile();
  50.      std::cout << "Plain text 2" << std::endl;
  51.      const std::vector<uint8_t>  plainText2 = ReadFile();
  52.      std::cout << "Ecnrypted text 1" << std::endl;
  53.      const std::vector<uint8_t>  encryptedText1= ReadFile();
  54.      std::cout << "Encrypted text 2" << std::endl;
  55.      const std::vector<uint8_t>  encryptedText2 = ReadFile();
  56.  
  57.  
  58.      const uint32_t c = 40832;
  59.      
  60.      time(&startTime);
  61.      
  62.      // Простые соотношения
  63.      // g1(X) = X ^ const
  64.      // g2(X) = X ^ const
  65.      // h(X) = X ^ const
  66.  
  67.      std::vector<uint8_t> X1{ plainText1[0], plainText1[1], plainText1[2], plainText1[3] };
  68.      std::vector<uint8_t> g1_X1{ plainText2[0], plainText2[1], plainText2[2], plainText2[3] };
  69.      std::vector<uint8_t> Y1{ encryptedText1[0], encryptedText1[1], encryptedText1[2], encryptedText1[3] };
  70.      std::vector<uint8_t> Y2{ encryptedText2[0], encryptedText2[1], encryptedText2[2], encryptedText2[3] };
  71.      
  72.      // for
  73.      for (uint32_t key = 0; key < UINT32_MAX; ++key)
  74.      {
  75.           if(key % 500000 == 0)
  76.                std::cout << std::endl << key << std::endl;;
  77.           // Если h(theta) < theta, значит этот ключ уже проверяли, идем дальше
  78.           if ( (key ^ c) < key )
  79.           {
  80.                continue;
  81.           }
  82.           std::vector<uint8_t> vKey{ static_cast<uint8_t>(key >> 24), static_cast<uint8_t>((key >> 16) & 0xFF),
  83.                static_cast<uint8_t>((key >> 8) & 0XFF), static_cast<uint8_t>(key & 0xFF) };
  84.           std::vector<uint8_t> vhKey{ static_cast<uint8_t>((key ^ c) >> 24), static_cast<uint8_t>(((key ^ c) >> 16) & 0xFF),
  85.                static_cast<uint8_t>(((key ^ c) >> 8) & 0XFF), static_cast<uint8_t>((key ^ c) & 0xFF) };
  86.           std::vector<uint8_t> Y_;
  87.           feistel::EncryptFunction(X1, Y_, vKey);
  88.        
  89.           for(size_t i = 0; i < 4; ++i)
  90.                Y_.pop_back();
  91.           // Первая проверка
  92.           if (Y1 == Y_)
  93.           {
  94.                std:: cout << "Found key: " << vKey[0] << vKey[1] << vKey[2] << vKey[3] << std::endl;
  95.                time(&endTime);
  96.                std::cout <<"Time: " << difftime(endTime, startTime) << std::endl;
  97.                return 0;
  98.           }
  99.           // Вторая проверка
  100.           std::vector<uint8_t> Y2_buf(4);
  101.           Y2_buf[0] = Y2[0] ^ static_cast<uint8_t> (c >> 24);
  102.           Y2_buf[1] = Y2[1] ^ static_cast<uint8_t> ((c >> 16) & 0XFF );
  103.           Y2_buf[2] = Y2[2] ^ static_cast<uint8_t> ((c >> 8) & 0XFF);
  104.           Y2_buf[3] = Y2[3] ^ static_cast<uint8_t> (c & 0xFF);
  105.           if (Y2_buf == Y_)
  106.           {
  107.                std:: cout << "Found key: " << vhKey[0] << vhKey[1] << vhKey[2] << vhKey[3] << std::endl;
  108.                time(&endTime);
  109.                std::cout <<"Time: " << difftime(endTime, startTime) << std::endl;
  110.                return 0;
  111.           }
  112.          
  113.      }
  114.      
  115.      time(&endTime);
  116.      std::cout <<"Time: " << difftime(endTime, startTime) << std::endl;
  117.  
  118.      return 0;
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement