Advertisement
saleks28

source

Jan 10th, 2021
1,105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.71 KB | None | 0 0
  1. #include "hash_function.h"
  2.  
  3. uint32_t sourceSize = 0;
  4.  
  5. ///@brief Функция для считывания имени файла
  6. ///
  7. std::string GetFileName( std::string purposeName )
  8. {
  9.      std::string fileName;
  10.      std::cout << "Enter filename to " << purposeName << ": ";
  11.      std::cin >> fileName;
  12.      std::cin.ignore(32767, '\n');
  13.      return fileName;
  14. }
  15.  
  16. ///@brief Функция для считывания ключа КС
  17. ///
  18. uint32_t GetFeistelKey()
  19. {
  20.      std::ifstream fileStream( GetFileName("read key"), std::ios::binary | std::ios::in );
  21.      uint32_t tempKey = 0;
  22.      if ( fileStream.is_open() )
  23.      {
  24.           // Ключ 4 байта - проверим размер файла
  25.           std::streampos fileSize;
  26.           fileSize = fileStream.tellg();
  27.           fileStream.seekg( 0, std::ios::end );
  28.           fileSize = fileStream.tellg() - fileSize;
  29.           fileStream.seekg( 0, std::ios::beg );
  30.  
  31.           fileStream >> std::noskipws;
  32.  
  33.           if ( static_cast<uint32_t>(fileSize) != 4 )
  34.           {
  35.                std::cout << "File length cannot be less than 4 bytes" << std::endl;
  36.                return 0;
  37.           }
  38.           else
  39.           {
  40.                for ( size_t i = 0; i < 4; ++i )
  41.                {
  42.                     tempKey += static_cast<uint8_t>( fileStream.get() );
  43.                     if (i != 3)
  44.                          tempKey <<= 8;
  45.                }
  46.           }
  47.      }
  48.      std::cout << "Key: " <<
  49.           ((tempKey >> 24) & 0xFF) << " " << ((tempKey >> 16) & 0xFF) << " " <<
  50.           ((tempKey >> 8) & 0xFF) << " " << (tempKey & 0xFF) << std::endl;
  51.      fileStream.close();
  52.  
  53.      return tempKey;
  54. }
  55.  
  56. ///@brief Функция для считывания открытого текста
  57. ///
  58. std::vector<uint8_t> ReadData( std::string fileName )
  59. {
  60.      std::ifstream fileStream( fileName, std::ios::binary | std::ios::in);
  61.      std::vector<uint8_t> data;
  62.  
  63.      if ( fileStream )
  64.      {
  65.           fileStream.seekg(0, std::ios::end);
  66.           data.reserve(static_cast<size_t>(fileStream.tellg()));
  67.           sourceSize = fileStream.tellg();
  68.           fileStream.seekg(0, std::ios::beg);
  69.      }
  70.      fileStream >> std::noskipws;
  71.  
  72.      if ( fileStream.is_open() )
  73.      {
  74.           for ( size_t i = 0; i < data.capacity(); ++i )
  75.           {
  76.                uint8_t tempSym;
  77.                fileStream >> tempSym;
  78.                data.push_back( tempSym );
  79.           }
  80.      }
  81.      fileStream.close();
  82.      return data;
  83. }
  84.  
  85. ///@brief Функция для записи шифртекста
  86. ///
  87. void WriteData( std::string fileName, std::vector<uint8_t> result )
  88. {
  89.      std::ofstream fileStream(fileName, std::ios::binary | std::ios::out);
  90.      if (fileStream.is_open())
  91.      {
  92.           for ( const uint8_t& sym : result )
  93.           {
  94.                fileStream << sym;
  95.           }
  96.      }
  97.      fileStream.close();
  98. }
  99.  
  100.  
  101. int main()
  102. {
  103.      // Данные КС
  104.      const std::vector<uint8_t> S{ 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 };
  105.      uint32_t feistelKey = GetFeistelKey();
  106.      // Объект КС
  107.      CryptoSystem cs( S, feistelKey );
  108.      
  109.      // Считываем открытый текст
  110.      std::vector<uint8_t> data = ReadData( GetFileName("for source text") );
  111.      uint32_t hash;
  112.      hash = cs.EncryptText( data );
  113.  
  114.      printf("Size file (L): %d ", sourceSize);
  115.      printf("( %.2X %.2X %.2X %.2X )\n", (uint8_t)(sourceSize >> 24), (uint8_t)(sourceSize >> 16), (uint8_t)(sourceSize >> 8), (uint8_t)(sourceSize));
  116.      printf("Hash: %u ", hash);
  117.      printf("( %.2X %.2X %.2X %.2X )\n", (uint8_t)(hash >> 24), (uint8_t)(hash >> 16), (uint8_t)(hash >> 8), (uint8_t)(hash));
  118.  
  119.      
  120.      return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement