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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2014, 23:27   #1
sinestro
Пользователь
 
Регистрация: 24.02.2012
Сообщений: 88
По умолчанию WinCrypt и c++.net

здрасте. в универе по защите информации задали написать програмку для шифрования/дешифрования файла. причём обязательно должен быть графический интерфейс. и вот какраз здесь начался геморой. на чистом winapi я боюсь даже браться, прикрутить на с# его наверное не получиться, поэтому решил попробовать с++.net слепил его как-то в кучу, но тут полезли непонятные ошибки(прикрепил в картинке). пробовал менять кодировку проекта - не помогло.
Код:
#include "windows.h"
#include "wincrypt.h" 
#pragma once 
namespace lab2 { 
	using namespace System;
	using namespace System::IO;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;
	using namespace System::Runtime::InteropServices;
...
String^ text;
...
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) //шифрование
			 {
				 HCRYPTPROV hProv;
				 HCRYPTKEY hSessionKey;
				 char* chartext = (char*) Marshal::StringToHGlobalAnsi(text ).ToPointer();
				 DWORD count=strlen(chartext);
				 // Получение контекста криптопровайдера
				 if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
				 {
					MessageBox::Show("CryptAcquireContext"); 
				 }
				 // Генерация сессионного ключа
				 if (!CryptGenKey(hProv, CALG_RC4, CRYPT_ENCRYPT | CRYPT_DECRYPT, &hSessionKey))
				 {
					 MessageBox::Show("CryptGenKey"); 
				 } 
				 // Шифрование данных
				 if (!CryptEncrypt(hSessionKey, 0, true, 0, (BYTE*)chartext, &count, strlen(chartext)))
				 {
					 MessageBox::Show("CryptEncrypt");
				 } 
			 }
Изображения
Тип файла: jpg ад.jpg (45.3 Кб, 123 просмотров)
sinestro вне форума Ответить с цитированием
Старый 25.10.2014, 00:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://msdn.microsoft.com/ru-ru/libr...(v=vs.90).aspx
p51x вне форума Ответить с цитированием
Старый 26.10.2014, 01:32   #3
sinestro
Пользователь
 
Регистрация: 24.02.2012
Сообщений: 88
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
за ссылку спасибо. добавил
Код:
[DllImport("crypt", CharSet=CharSet::Auto)]
	extern "C" BOOL CryptEncrypt(HCRYPTKEY hKey, HCRYPTHASH hHash, BOOL Final, DWORD dwFlags, BYTE* pbData, DWORD* pdwDataLen, DWORD dwBufLen);
	[DllImport("crypt", CharSet=CharSet::Auto)]
	extern "C" WINADVAPI BOOL WINAPI CryptGenKey( HCRYPTPROV hProv, ALG_ID Algid, DWORD dwFlags, HCRYPTKEY * phKey );
	[DllImport("crypt", CharSet=CharSet::Auto)]
	extern "C" BOOL WINAPI CryptAcquireContext( HCRYPTPROV *phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags);
а почему чтобы вызвать эти функции нужны такие пляски с бубном(на qt тоже)?
sinestro вне форума Ответить с цитированием
Старый 26.10.2014, 02:01   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Потому что это стык управляемого и неуправляемого (нативного) кода...
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаленный SQL-сервер Ado.Net + .Net remoting + Asp .Net gammaray Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 22.11.2010 17:36