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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
#1

crypto api не работает CryptGenKey - C++

11.02.2013, 10:25. Просмотров 1817. Ответов 2
Метки нет (Все метки)

http://www.rsdn.ru/article/crypto/usingcryptoapi.xml
беру пример из этой статьи
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
HCRYPTPROV hProv;
HCRYPTKEY hSessionKey;
 
// Получение контекста криптопровайдера
if (!CryptAcquireContext(&hProv, NULL, NULL, 
    PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
  Error("CryptAcquireContext");
  return;
}
 
std::cout << "Cryptographic provider initialized" << std::endl;
 
// Генерация сессионного ключа
if (!CryptGenKey(hProv, CALG_RC4, 
    CRYPT_ENCRYPT | CRYPT_DECRYPT, &hSessionKey))
{
  Error("CryptGenKey");
  return;
}
 
std::cout << "Session key generated" << std::endl;
 
// Данные для шифрования
char string[]="Test";
DWORD count=strlen(string);
 
// Шифрование данных
if (!CryptEncrypt(hSessionKey, 0, true, 0, (BYTE*)string, 
    &count, strlen(string)))
{
  Error("CryptEncrypt");
  return;
}
 
std::cout << "Encryption completed" << std::endl;
 
// Тестовый вывод на экран
std::cout << "Encrypted string: " << string << std::endl;
Добавлено через 57 секунд
уже на 15-ой строке выводится сообщение об ошибке - что функция не отработала. почему?

Добавлено через 11 минут
чую что не правильный параметр какой-то, пытался гуглить, нашел что рсдн при переводе намудрили с CRYPT_ENCRYPT | CRYPT_DECRYPT, но если не это, то что туда передать?

Добавлено через 21 минуту
C++
1
2
CryptGenKey(hProv, CALG_RC4,
    CRYPT_EXPORTABLE, &hSessionKey)
заработало

Добавлено через 48 минут
что за рсдн, почему примеры с него не работают, кто его вообще писал? теперь очередная проблема с экспортом ключей, пример с рсдн не работает, вылетает на 1ом условие, CryptAcquireContext
пример по ссылке в 1ом посту, чуть ниже прошлого примера
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.02.2013, 10:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос crypto api не работает CryptGenKey (C++):

Building Crypto++ процесс подключения данной библиотеки - C++
Здравствуйте, Возникла проблема подключения криптографической библиотеки Crypto++(CryptoPP) к проекту Xcode. Опишите, пожалуйста,...

Crypto API и С#. Нужно сделать авторизацию. - C#
Возникла надобность написать вэб интерфейс к программулине написаной на С++, и Visual Basic. Для работы с прогой сей надобно...

AES-128 (Crypto API) не шифрует - Delphi
Написал библиотеку, реализующую шифрование входного файла алгоритмом AES-128 с помощью Crypto API. Вот ее код: library Project1; ...

Crypto++ - Криптография
// elgamal.cpp - written and placed in the public domain by Wei Dai #include &quot;dll.h&quot; #include &quot;pch.h&quot; #include &quot;elgamal.h&quot; #include...

Не работает Twitter API - Java
Кто юзал джава вариант ? Скачал джар либу с http://code.google.com/p/java-twitter/downloads/list ...

JSONP vk api не работает - AngularJS
angular.module('myApp', ) .controller('DataCtrl', function($scope, $http) { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7191 / 5365 / 280
Регистрация: 10.12.2010
Сообщений: 23,674
Записей в блоге: 17
27.05.2013, 04:02 #2
Актуально...Те же ошибки...

Вопрос как правильно пользоваться CryptoApi ?
Нужен рабочий пример.

Еще статья:
http://www.inattack.ru/article/ispol...l#.UaJk3Njm4tM
0
Desu_Is_A_Lie
62 / 62 / 3
Регистрация: 26.02.2012
Сообщений: 114
27.05.2013, 06:59 #3
Класс, коряво сделанный когда-то очень давно:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
[.cpp]
//---------------------------------------------------------------------------
#include    "CWinCrypt.h"
//---------------------------------------------------------------------------
 
CWinCrypt::CWinCrypt(BYTE *pbtKey, DWORD dwKeySize, ALG_ID sAlgID) : m_hProv(0), m_hKey(0)
{
    if (CryptAcquireContext(&this->m_hProv, NULL, MS_STRONG_PROV, PROV_RSA_FULL, 0))
    {
        HCRYPTHASH hHash;
 
        if (CryptCreateHash(this->m_hProv, CALG_MD5, 0, 0, &hHash))
        {
            if (CryptHashData(hHash, pbtKey, dwKeySize, 0))
            {
                CryptDeriveKey(this->m_hProv, sAlgID, hHash, 0, &this->m_hKey);
            }
            CryptDestroyHash(hHash);
        }
    }
 
    if (!this->m_hProv || !this->m_hKey)    {throw 0;}          // too lazy
}
//---------------------------------------------------------------------------
 
CWinCrypt::~CWinCrypt()
{
    if (this->m_hKey)   {CryptDestroyKey(this->m_hKey);}
    if (this->m_hProv)  {CryptReleaseContext(this->m_hProv, 0);}
}
//---------------------------------------------------------------------------
 
bool __stdcall CWinCrypt::Encrypt(BYTE *pbtData, DWORD *pdwDataSize, DWORD dwBufferSize, bool bFinal)
{
    return  CryptEncrypt(this->m_hKey, 0, bFinal, 0, pbtData, pdwDataSize, dwBufferSize);
}
//---------------------------------------------------------------------------
 
bool __stdcall CWinCrypt::Decrypt(BYTE *pbtData, DWORD *pdwDataSize, bool bFinal)
{
    return  CryptDecrypt(this->m_hKey, 0, bFinal, 0, pbtData, pdwDataSize);
}
//---------------------------------------------------------------------------
 
[.h]
//---------------------------------------------------------------------------
#ifndef     CWinCryptH
#define     CWinCryptH
//---------------------------------------------------------------------------
#include    <windows.h>
#include    <wincrypt.h>
//---------------------------------------------------------------------------
class       CWinCrypt
{
    public:
                                    CWinCrypt(BYTE *pbtKey, DWORD dwKeySize, ALG_ID sAlgID);
                                    ~CWinCrypt();
 
        bool        __stdcall       Encrypt(BYTE *pbtData, DWORD *pdwDataSize, DWORD dwBufferSize, bool bFinal = true);
        bool        __stdcall       Decrypt(BYTE *pbtData, DWORD *pdwDataSize, bool bFinal = true);
 
    private:
                                    CWinCrypt()             {}
                                    CWinCrypt(CWinCrypt&)   {}
                                    
        HCRYPTPROV                  m_hProv;
        HCRYPTKEY                   m_hKey;
};
//---------------------------------------------------------------------------
#endif
 
[example]
        CWinCrypt           cwincrptPCKG((BYTE*)"PASSWORD", 8, CALG_3DES);
 
        DWORD               dwDataSz        = (DWORD)tmemstrFile->Size;
        DWORD               dwBufSz         = dwDataSz;
        cwincrptPCKG.Encrypt(NULL, &dwBufSz, 0);
 
        BYTE                *pbtData        = new BYTE[dwBufSz];
        memcpy(pbtData, tmemstrFile->Memory, dwDataSz);
        cwincrptPCKG.Encrypt(pbtData, &dwDataSz, dwBufSz);
 
        std::FILE           *flOut          = std::fopen("C:\\_TEST\\test.pckg", "wb");
        std::fwrite(pbtData, 1, dwBufSz, flOut);
        std::fclose(flOut);
 
        delete[]            pbtData;
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2013, 06:59
Привет! Вот еще темы с ответами:

Библиотека Crypto - Python
Где можно найти библиотеку Crypto под win? from Crypto.Util.number import * Все время выдает ошибку ImportError: No module named...

Crypto++ для qt - C++ Qt
Привет все, подскажите пожалуйста как подключить библиотеку Crypto++, не могу найти, ни его для qt ни документации, может кто то работал с...

Javax.Crypto - Java SE
Есть код для шифровки/дешифровки файлов AES в режиме CBC.Нужен режим ECB.Заранее спасибо import java.io.InputStream; import...

Почему не работает API функция? - C#
При компиляции следующего кода - вылетает ошибка: using System; using System.Collections.Generic; using System.ComponentModel; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru