Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2017, 09:39   #1
UbeiBobra
Пользователь
 
Регистрация: 03.09.2014
Сообщений: 39
По умолчанию помогите с решением задачи [C++] Нужно создать приложение которое шифрует и дешифрует содержимое любого файла средствами Windows Crypto API, алгоритмом 3des

Помогите пожалуйста с решением задачи.
Нужно создать приложение которое шифрует и дешифрует содержимое любого файла средствами Windows Crypto API, алгоритмом 3des.

Вот есть код шифрования текстовых данных, как переделать чтобы можно было шифровать и дешифровать любой файл алгоритмом 3des
Код:
//---------------------------------------------------------------------------

#pragma hdrstop

#include <stdio.h>
#include <iostream.h>
#include <windows.h>
#include <conio.h>
#include <wincrypt.h>

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
  HCRYPTPROV hProv;
  HCRYPTKEY hKey, hPublicKey, hNewKey;
  DWORD count;

  if (!CryptAcquireContext(&hProv, "test",NULL, PROV_RSA_FULL, 0))
  {
      if (GetLastError() == NTE_BAD_KEYSET)
      {
         if(!CryptAcquireContext(&hProv, "test", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
         {
            cout<<("Error CryptAcquireContext");
            return 0;
         }
      }
  }
  cout<<"Cryptographic provider initialized"<<endl;


  if (!CryptGenKey(hProv, CALG_RC4,CRYPT_EXPORTABLE | CRYPT_ENCRYPT | CRYPT_DECRYPT,
      &hKey))
  {
      cout<<"Error CryptGenKey"<<endl;
      system("pause");
     return 0;
  }
  cout<<"Session key generated"<<endl;

  if(!CryptGetUserKey( hProv,  AT_KEYEXCHANGE,  &hPublicKey))
  {
     if(NTE_NO_KEY == GetLastError())
     {
        if(!CryptGenKey( hProv,  AT_KEYEXCHANGE,  CRYPT_EXPORTABLE,  &hPublicKey))
	{
	   cout<<"Error public key";
        }
     }
  }
  cout << "Public key is received" << endl;

  count = 0;

  if (!CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, NULL, &count))
  {
     cout<<"Error CryptExportKey"<<endl;
     return 0;
  }


   BYTE* data = static_cast<BYTE*>(malloc(count));
   ZeroMemory(data, count);


   if (!CryptExportKey(hKey, hPublicKey, SIMPLEBLOB, 0, data, &count))
   {
      cout<<"Error export key"<<endl;
      return 0;
   }
   cout << "Key's export completed" << endl;


  char string[]="Test";
  count=strlen(string);


  if (!CryptEncrypt(hKey, 0, true, 0, (BYTE*)string,&count,strlen(string)))
  {
      cout<<"Error CryptEncrypt"<<endl;
      system("pause");
      return 0;
  }
  cout<<"Encryption completed"<<endl;


  cout<<"Encrypted string: "<<string<<endl;


  if(!CryptImportKey(hProv, data, count, hPublicKey, 0, &hNewKey))
  {
     cout<<"Error CryptImportKey"<<endl;
     return 0;
  }
  cout << "Key's import completed" << endl;


  if(!CryptDecrypt(hKey, 0, true, 0, (BYTE*)string, &count))
  {
     cout<<"Error CryptDecrypt"<<endl;
     return 0;
  }
  cout << "Decryption completed" << endl;


  cout << "Decrypted string: " << string << endl;


  CryptDestroyKey(hKey);
  CryptReleaseContext(hProv, 0);
  getch();
}
//---------------------------------------------------------------------------
UbeiBobra вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AES-128 (Crypto API) не шифрует Abrokadawr Общие вопросы Delphi 0 05.11.2012 13:57
Нужно создать диалоговое приложение для Windows NT. В чем ошибка? veronika_nika Помощь студентам 6 22.10.2012 21:50
Нужно создать диалоговое приложение для Windows NT. В чем ошибка? veronika_nika Общие вопросы C/C++ 1 21.10.2012 22:17
Многопоточное приложение средствами WIN 32 API iamStudent Visual C++ 2 01.11.2011 15:28
Необходимо написать приложение, которое поднимает коннект (VPN к примеру) на windows server -=TTRn=- Помощь студентам 0 30.06.2010 00:27