Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Crypto API HELP...

492
08 августа 2005 года
alibabaich
238 / / 08.07.2004
Как работать с крипто апи, точнее функция CryptGenKey - генерирует ключи, но для этого нужно создать контейнер ключа. Как это сделать?
Или что в коде не то?
class USER
{
public:
CString m_Name,m_UID;
HCRYPTPROV m_hProv;
USER()
{
CString _Name = "";
DWORD _Type;
ULONG _l;
CRegKey _key;
_key.Open(HKEY_LOCAL_MACHINE,"Software\\AWK\\AUTSer",KEY_READ);
_key.QueryStringValue("NameProv",NULL,&_l);
_Name.GetBufferSetLength(_l);
_key.QueryStringValue("NameProv",_Name.GetBuffer(),&_l);
_key.QueryDWORDValue("TypeProv",_Type);
_key.Close();
if(!CryptAcquireContext(&m_hProv, // handle to the CSP
NULL, // container name
_Name, // use the default provider
_Type, // provider type
CRYPT_VERIFYCONTEXT)) // flag values
{
MessageBox(NULL,"Create cryptoprovider","ERROR!",NULL);
return;
}
};
virtual ~USER()
{
if(m_hKey)
CryptDestroyKey(m_hKey);
if(m_hProv)
CryptReleaseContext(m_hProv,0);
};
CString EnCrypt(CString _S)
{
DWORD _len = _S.GetLength();
CryptEncrypt(m_hKey,
NULL,
true,
0,
(BYTE *)_S.GetBuffer(),
&_len,
_len);

return _S;
};
CString DeCrypt(CString _S)
{
DWORD _len = _S.GetLength();
CryptDecrypt(m_hKey,
0,
true,
0,
(BYTE *)_S.GetBuffer(),
&_len);
return _S;
};
bool m_Status;
void SetKey(const BYTE* _pBuf,DWORD _len)
{
CryptImportKey(m_hProv,
_pBuf,
_len,
m_hKey,
0,
&m_hKey);
m_LenKey = _len;
};
void GenKey(CString _name)
{
DWORD _Alg;
CRegKey _key;
_key.Open(HKEY_LOCAL_MACHINE,"Software\\AWK\\AUTSer",KEY_READ);
_key.QueryDWORDValue("AlgProv",_Alg);
_key.Close();
if(!CryptGenKey(m_hProv,
_Alg,
CRYPT_EXPORTABLE | CRYPT_ENCRYPT| CRYPT_DECRYPT,
&m_hKey))
{
MessageBox(NULL,"Generation key","ERROR!",NULL);
return;
}
// Получение размера массива, используемого для экспорта ключа
DWORD _len;
if (!CryptExportKey(m_hKey, 0, SYMMETRICWRAPKEYBLOB, 0, NULL, &_len))
{
MessageBox(NULL,"Export key","ERROR!",NULL);
return;
}

// Инициализация массива, используемого для экспорта ключа
BYTE* _data = static_cast<BYTE*>(malloc(_len));
//ZeroMemory(_data, _len);

// Экспорт ключа шифрования
CryptExportKey(m_hKey,
0,
SYMMETRICWRAPKEYBLOB,
0,
_data,
&_len);
CFile _f(_name + ".pr",CFile::modeCreate|CFile::modeWrite);
_f.Write(_data,_len);
_f.Close();
m_LenKey = _len;
};
private:
UINT m_LenKey;
HCRYPTKEY m_hKey,m_hPub;
};
406
08 августа 2005 года
vitaly2003s
481 / / 27.07.2004
Когда то я страдал этой фигней и написал следующий файл,скачай посмотри,там чуть ли не половина всех CryptoApi задействована. Правда я редко там использовал CryptGenKey,вместо этого я использовал связку CryptHashData + CryptDeriveKey. Писал я давненько все это еще в начале моего программисткого пути так что код конечно корявыйи необектноориентированный,но думаю в качестве примера пойдет,тем более я там дофига чего использовал из семества CryptApi.
406
08 августа 2005 года
vitaly2003s
481 / / 27.07.2004
в том числе и создание контейнеров.
492
09 августа 2005 года
alibabaich
238 / / 08.07.2004
Цитата:
Originally posted by vitaly2003s
в том числе и создание контейнеров.


Спасибо.

492
09 августа 2005 года
alibabaich
238 / / 08.07.2004
Все равно не могу понять как генерировать ключи...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог