Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <wincrypt.h>
- #include <fstream>
- #include <iostream>
- #include <iomanip>
- #include <string>
- using namespace std;
- int main()
- {
- setlocale(LC_ALL, "RUS");
- // D:\stim\test.txt
- string F;
- string line;
- cout << "Путь к файлу: ";
- cin >> F;
- ifstream file(F);
- if (!file.is_open())
- {
- cout << "Файл не открылся" << endl;
- }
- getline(file, line);
- file.close();
- HCRYPTPROV hProv;
- HCRYPTHASH hHash;
- HCRYPTHASH hHash2;
- if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
- {
- cerr << "Дескриптор не получен: " << GetLastError();
- }
- if (!CryptCreateHash(hProv, CALG_SHA, 0, 0, &hHash))
- {
- cerr << "Хэш-объект не создан: " << GetLastError();
- CryptReleaseContext(hProv, 0);
- }
- if (!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash2))
- {
- cerr << "Хэш-объект не создан: " << GetLastError();
- CryptReleaseContext(hProv, 0);
- }
- ALG_ID hashAlgId;
- DWORD hashAlgIdSize = sizeof(hashAlgId);
- if (!CryptGetHashParam(hHash, HP_ALGID, (BYTE*)&hashAlgId, &hashAlgIdSize, 0))
- {
- cerr << "Ошибка при получение идентификатора алгоритма: " << GetLastError();
- //delete[] fileData;
- CryptDestroyHash(hHash);
- CryptReleaseContext(hProv, 0);
- }
- cout << "Идентификатор алгоритма хеширования: " << hex << hashAlgId << endl;
- LPCSTR pbData = line.c_str();
- if (!CryptHashData(hHash, (BYTE*)pbData, line.size(), 0))
- {
- cerr << "Хэширование провалилось: " << GetLastError();
- CryptDestroyHash(hHash);
- CryptReleaseContext(hProv, 0);
- }
- if (!CryptHashData(hHash2, (BYTE*)pbData, line.size(), 0))
- {
- cerr << "Хэширование провалилось: " << GetLastError();
- CryptDestroyHash(hHash2);
- CryptReleaseContext(hProv, 0);
- }
- DWORD hashSize = 0;
- DWORD hashSizeSize = sizeof(hashSize);
- if (!CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&hashSize, &hashSizeSize, 0))
- {
- cerr << "Ошибка при получение параметра : " << GetLastError();
- CryptDestroyHash(hHash);
- CryptReleaseContext(hProv, 0);
- }
- BYTE* hashData = new BYTE[hashSize];
- if (!CryptGetHashParam(hHash, HP_HASHVAL, hashData, &hashSize, 0))
- {
- cerr << "Ошибка при получение хеша: " << GetLastError();
- delete[] hashData;
- CryptDestroyHash(hHash);
- CryptReleaseContext(hProv, 0);
- }
- cout << "Хэш: ";
- for (DWORD i = 0; i < hashSize; i++)
- {
- cout << setw(2) << setfill('0') << hex << (int)hashData[i];
- }
- cout << endl;
- DWORD hashSize2 = 0;
- DWORD hashSizeSize2 = sizeof(hashSize2);
- if (!CryptGetHashParam(hHash2, HP_HASHSIZE, (BYTE*)&hashSize2, &hashSizeSize2, 0))
- {
- cerr << "Ошибка при получение параметра : " << GetLastError();
- CryptDestroyHash(hHash2);
- CryptReleaseContext(hProv, 0);
- }
- BYTE* hashData2 = new BYTE[hashSize2];
- if (!CryptGetHashParam(hHash2, HP_HASHVAL, hashData2, &hashSize2, 0))
- {
- cerr << "Ошибка при получение хеша: " << GetLastError();
- delete[] hashData2;
- CryptDestroyHash(hHash2);
- CryptReleaseContext(hProv, 0);
- }
- cout << "Хэш: ";
- for (DWORD i = 0; i < hashSize2; i++)
- {
- cout << setw(2) << setfill('0') << hex << (int)hashData2[i];
- }
- cout << endl;
- delete[] hashData;
- delete[] hashData2;
- CryptDestroyHash(hHash);
- CryptDestroyHash(hHash2);
- CryptReleaseContext(hProv, 0);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement