Форум программистов, компьютерный форум CyberForum.ru

CryptoApi на WinXp и Win2000 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нестандартные бмблмотеки, которые работают со строками быстрее. http://www.cyberforum.ru/cpp-beginners/thread476941.html
Podskagite, pls, kakie, gde mogno vsyat'/kupit'... Proga postoyanno vipolnyaet ogromnoe kol-vo operaziy so strokami (ishet posiziu, prisvaivaet, viresaet...). Nugno eto delo uskorit'. Moget eshe 4to-to interesnoe posovetuete? Saranie blagodaren.
C++ CEdit::GetFont() возвращает NULL Наверное, все знают сайт 'Первые шаги': 'MFC шаг за шагом'. Заглянем во второй шаг: http://www.firststeps.ru/mfc/steps/2.html Там просто создается динамическое (из указателя CEdit*) текстовое поле с именем MyEdit. Сразу после создания, когда на форму положим MyEdit, заполним его текстом 'qwerty'. И вернем результат. Естественно, все получилось. А если попытаться получить текущий шрифт... http://www.cyberforum.ru/cpp-beginners/thread476872.html
C++ Чтение из реестра
подскажите, пожалуйста, каким образом можно считать из реестра значения. Это смешно, но ВСЕ доступные мне примеры считывают одно значение. Я хочу считать из ключа uKey несколько значений (строковых) и присвоить эти значения переменным типа LPTSTR в VB я это за пару минут писал, а здесь уже второй день :( и еще каким образом очистить переменную char (strnset, strset у меня работают только...
C++ Как узнать, что в ком порт что-то записалось?
Народ, подскажите как узнать что в ком порт что-то записалось, точнее пришло от подключенного оборудования. Пробовал постоянно опрашивать порт но иногда программа как-будто бы не замечает пришеддших данных пока они повторно не придут. Программа пишется на VC++ 6.0 под winapi. Я хотел бы узнать можно ли перехватить само событие прихода данных что бы стопроцентно с первого раза прочитать что туда...
C++ Нужно чтоб в переменной типа CSrting data, находилась дата http://www.cyberforum.ru/cpp-beginners/thread476852.html
Мне нужно, что бы в переменной типа CSrting data, находилась дата ( день, месяц, год, час, мин, сек). Есть ли что нить в этом роде...
C++ Можно ли на CBuilder 6 откомпилировать exe для Linux? I voobshe, vot napisal ya na CBuilder programmku, a kak sdelat' takuu ge dlya Linuxa? Isvinyaus' sa durazkiy vopros i saranie blagodaru sa podrobniy otvet. подробнее

Показать сообщение отдельно
globus000
Сообщений: n/a

CryptoApi на WinXp и Win2000 - C++

22.06.2009, 17:26. Просмотров 923. Ответов 0
Метки (Все метки)

Есть странная проблемма следующего содержания
Есть простенький класс для шифрования/дешифрования по RSA с применением Cryptoapi. Когда я запускаю свою програмулину под WinXp все работает и шифрует нормально, когда запускаю под Win2000 выпадает сообщение 'Плохой ключ'. При этом все ключи инициализуруются правильно и при их инициализации ошибок нет
Помогите, как решить эту проблему

код класса:

[code]
CZCrypt::CZCrypt()
{
m_hRSACryptProv = NULL;
m_hRSAKey = NULL;
m_hDESKey = NULL;
}

CZCrypt::~CZCrypt()
{
ReleaseRSA();
}

DWORD CZCrypt::InitRSA(char *UserName)
{
DWORD err = 0;

if(!CryptAcquireContext(&m_hRSACryptProv, UserName, MS_DEF_PROV, PROV_RSA_FULL, 0))
{
err = GetLastError();
if(err != 0x80090016)
return err;
if(!CryptAcquireContext(&m_hRSACryptProv, UserName, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
return GetLastError();
}
return 0;
}

DWORD CZCrypt::GenDESKey()
{
if(m_hRSACryptProv == NULL)
return 1;

if(m_hDESKey)
CryptDestroyKey(m_hDESKey);
m_hDESKey = NULL;

if(!CryptGenKey(m_hRSACryptProv, CALG_DES, CRYPT_EXPORTABLE, &m_hDESKey)) //64 bit
return GetLastError();
return 0;
}

void CZCrypt::ReleaseRSA()
{
if(m_hRSACryptProv)
CryptReleaseContext(m_hRSACryptProv, 0);
m_hRSACryptProv = NULL;
if(m_hRSAKey)
CryptDestroyKey(m_hRSAKey);
m_hRSAKey = NULL;
if(m_hDESKey)
CryptDestroyKey(m_hDESKey);
m_hDESKey = NULL;
}

DWORD CZCrypt::GenRSAKeys()
{
if(m_hRSACryptProv == NULL)
return 1;

if(m_hRSAKey)
CryptDestroyKey(m_hRSAKey);
m_hRSAKey = NULL;

if(!CryptGenKey(m_hRSACryptProv, AT_KEYEXCHANGE, CRYPT_EXPORTABLE|0x04000000, &m_hRSAKey)) //1024 bit
return GetLastError();
return 0;
}

DWORD CZCrypt::GetRSAPublicKey(RSAPublicKey1024* pkey)
{
if(m_hRSACryptProv==NULL || m_hRSAKey==NULL)
return 1;

DWORD actual_data_length = sizeof(RSAPublicKey1024);
if(!CryptExportKey(m_hRSAKey, NULL, PUBLICKEYBLOB, 0, (BYTE*)pkey, &actual_data_length))
return GetLastError();
return 0;
}

DWORD CZCrypt::GetDESKey(DESKEY* dkey)
{
if(m_hRSACryptProv==NULL || m_hDESKey==NULL)
return 1;

DWORD actual_data_length = sizeof(DESKEY);
if(!CryptExportKey(m_hDESKey, NULL, PLAINTEXTKEYBLOB, 0, (BYTE*)dkey, &actual_data_length))
return GetLastError();
return 0;
}

DWORD CZCrypt::EncryptRSA(BYTE* plainbuf, int plainbufsize, DWORD* actual_data_length)
{
if(m_hRSACryptProv==NULL || m_hRSAKey==NULL)
return 1;

if(plainbufsize < 1024/8)
return 1;

if(!CryptEncrypt(m_hRSAKey, NULL, TRUE, 0, (BYTE*)plainbuf, actual_data_length, plainbufsize))
return GetLastError();
return 0;
}

DWORD CZCrypt:ecryptRSA(BYTE* cipherbuf, DWORD* actual_data_length)
{
if(m_hRSACryptProv==NULL || m_hRSAKey==NULL)
return 1;

if(!CryptDecrypt(m_hRSAKey, NULL, TRUE, 0, (BYTE*)cipherbuf, actual_data_length))
return GetLastError();
return 0;
}

DWORD CZCrypt::ImportRSAKey(BYTE* plainRSAkey, DWORD dwExp)
{
if(m_hRSACryptProv==NULL)
return 1;

if(m_hRSAKey != NULL)
{
if(!CryptDestroyKey(m_hRSAKey))
return 1;
m_hRSAKey = NULL;
}

RSAPublicKey1024 rkey;
CopyMemory(rkey.modulus, plainRSAkey, 1024/8);
rkey.publickeystruc.aiKeyAlg = ALG_TYPE_RSA|ALG_CLASS_KEY_EXCHANGE;
rkey.publickeystruc.bType = PUBLICKEYBLOB;
rkey.publickeystruc.bVersion = CUR_BLOB_VERSION;
rkey.publickeystruc.reserved = 0;
rkey.rsapubkey.bitlen = 1024;
rkey.rsapubkey.magic = 0x31415352; //RSA1
rkey.rsapubk
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru