Advertisement
istomina_sofia

л2крипто

Apr 14th, 2024
867
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.93 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <wincrypt.h>
  3. #include <fstream>
  4. #include <iostream>
  5. #include <iomanip>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. int main()
  11. {
  12.     setlocale(LC_ALL, "RUS");
  13.    
  14. // D:\stim\test.txt
  15.    
  16.     string F;
  17.     string line;
  18.  
  19.     cout << "Путь к файлу: ";
  20.     cin >> F;
  21.  
  22.     ifstream file(F);  
  23.     if (!file.is_open())
  24.     {
  25.         cout << "Файл не открылся" << endl;
  26.     }
  27.     getline(file, line);
  28.  
  29.     file.close();
  30.  
  31.     HCRYPTPROV hProv;
  32.     HCRYPTHASH hHash;
  33.     HCRYPTHASH hHash2;
  34.  
  35.     if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
  36.     {
  37.         cerr << "Дескриптор не получен: " << GetLastError();
  38.     }
  39.  
  40.  
  41.     if (!CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash))
  42.     {
  43.         cerr << "Хэш-объект не создан: " << GetLastError();
  44.         CryptReleaseContext(hProv, 0);
  45.     }
  46.  
  47.     if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash2))
  48.     {
  49.         cerr << "Хэш-объект не создан: " << GetLastError();
  50.         CryptReleaseContext(hProv, 0);
  51.     }
  52.  
  53.  
  54.     ALG_ID hashAlgId;
  55.     DWORD hashAlgIdSize = sizeof(hashAlgId);
  56.  
  57.     if (!CryptGetHashParam(hHash, HP_ALGID, (BYTE*)&hashAlgId, &hashAlgIdSize, 0))
  58.     {
  59.         cerr << "Ошибка при получение идентификатора алгоритма: " << GetLastError();
  60.         //delete[] fileData;
  61.         CryptDestroyHash(hHash);
  62.         CryptReleaseContext(hProv, 0);
  63.     }
  64.  
  65.     cout << "Идентификатор алгоритма хеширования: " << hex << hashAlgId << endl;
  66.  
  67.  
  68.     LPCSTR pbData = line.c_str();
  69.     if (!CryptHashData(hHash, (BYTE*)pbData, line.size(), 0))
  70.     {
  71.         cerr << "Хэширование провалилось: " << GetLastError();
  72.         CryptDestroyHash(hHash);
  73.         CryptReleaseContext(hProv, 0);
  74.     }
  75.  
  76.     if (!CryptHashData(hHash2, (BYTE*)pbData, line.size(), 0))
  77.     {
  78.         cerr << "Хэширование провалилось: " << GetLastError();
  79.         CryptDestroyHash(hHash2);
  80.         CryptReleaseContext(hProv, 0);
  81.     }
  82.  
  83.    
  84.     DWORD hashSize = 0;
  85.     DWORD hashSizeSize = sizeof(hashSize);
  86.  
  87.     if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&hashSize, &hashSizeSize, 0))
  88.     {
  89.         cerr << "Ошибка при получение параметра : " << GetLastError();
  90.         CryptDestroyHash(hHash);
  91.         CryptReleaseContext(hProv, 0);
  92.     }
  93.  
  94.     BYTE* hashData = new BYTE[hashSize];
  95.     if (!CryptGetHashParam(hHash, HP_HASHVAL, hashData, &hashSize, 0))
  96.     {
  97.         cerr << "Ошибка при получение хеша: " << GetLastError();
  98.         delete[] hashData;
  99.         CryptDestroyHash(hHash);
  100.         CryptReleaseContext(hProv, 0);
  101.     }
  102.  
  103.     cout << "Хэш: ";
  104.     for (DWORD i = 0; i < hashSize; i++)
  105.     {
  106.         cout << setw(2) << setfill('0') << hex << (int)hashData[i];
  107.     }
  108.     cout << endl;
  109.  
  110.  
  111.  
  112.     DWORD hashSize2 = 0;
  113.     DWORD hashSizeSize2 = sizeof(hashSize2);
  114.  
  115.     if (!CryptGetHashParam(hHash2, HP_HASHSIZE, (BYTE*)&hashSize2, &hashSizeSize2, 0))
  116.     {
  117.         cerr << "Ошибка при получение параметра : " << GetLastError();
  118.         CryptDestroyHash(hHash2);
  119.         CryptReleaseContext(hProv, 0);
  120.     }
  121.  
  122.     BYTE* hashData2 = new BYTE[hashSize2];
  123.     if (!CryptGetHashParam(hHash2, HP_HASHVAL, hashData2, &hashSize2, 0))
  124.     {
  125.         cerr << "Ошибка при получение хеша: " << GetLastError();
  126.         delete[] hashData2;
  127.         CryptDestroyHash(hHash2);
  128.         CryptReleaseContext(hProv, 0);
  129.     }
  130.  
  131.     cout << "Хэш: ";
  132.     for (DWORD i = 0; i < hashSize2; i++)
  133.     {
  134.         cout << setw(2) << setfill('0') << hex << (int)hashData2[i];
  135.     }
  136.     cout << endl;
  137.  
  138.  
  139.     delete[] hashData;
  140.     delete[] hashData2;
  141.     CryptDestroyHash(hHash);
  142.     CryptDestroyHash(hHash2);
  143.     CryptReleaseContext(hProv, 0);
  144.     return 0;
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement