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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
nickrb
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 37
#1

cryptoapi, шифрование, 3DES - C++

25.04.2011, 19:37. Просмотров 2893. Ответов 1
Метки нет (Все метки)

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
BYTE* Encrypt(char *str, char *password)
{
    HCRYPTPROV hCryptProv = 0; 
    HCRYPTKEY hKey = 0; 
    HCRYPTHASH hHash = 0; 
    BYTE    *pBuffer = 0;
    DWORD   dwBufferLen = strlen(str);
 
CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_SCHANNEL, 0);
CryptCreateHash(hCryptProv, CALG_SHA, 0, 0, &hHash);
CryptHashData(hHash, (BYTE*)password, strlen(password), 0);
CryptDeriveKey(hCryptProv, CALG_3DES, hHash, 0, &hKey);
CryptEncrypt(hKey, 0, TRUE, 0, 0, &dwBufferLen, strlen(str));
 
pBuffer = (BYTE*)malloc(dwBufferLen);
memcpy(pBuffer, str, dwBufferLen);
CryptEncrypt(hKey, 0, TRUE, 0, pBuffer, &dwBufferLen, strlen(str));
 
CryptDestroyKey(hKey); 
CryptDestroyHash(hHash);
CryptReleaseContext(hCryptProv,0);
 
return pBuffer;
}
не знаю почему, на выходе получаю входные не зашифрованные данные
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2011, 19:37     cryptoapi, шифрование, 3DES
Посмотрите здесь:

cryptoapi, SHA-1 - C++
char *str = new char; //данные HCRYPTPROV hCryptProv = 0; HCRYPTHASH hHash = 0; gets(str); DWORD count=strlen(str); ...

Хеширование MD5 CryptoAPI - C++
Решал задачу на хеширование текста алгоритмом MD5 Дошел до такого: #include "stdafx.h" #include <iostream> #include <windows.h> ...

Литература по получению MD5 файла в C++ с CryptoApi - C++
Помогите пожалуйста, требуется написать программу, которая выводит на экран хеш файла через CryptiApi. На сайте MSDN есть статейка: Example...

CryptoAPI "хеш не может быть использовано в указанном состоянии" - C++
Здравствуйте. Возникает вышеуказанная ошибка (номер 8009000C) при вызове CryptEncrypt. Хотелось бы разобраться, в чём проблема. Мне нужно...

Шифрование - C++
Создать выходной зашифрованный файл на основе входного. Шифрование файла выполняется по следующему правилу: в каждом слове строки первый...

Шифрование - C++
Собственно, вопрос не совсем по си++, но нашел это место оптимальным. Так вот, речь пойдет о шифровании. А точнее: стоит ли уповать на...

Шифрование - C++
Доброго времени суток, сегодня весь день сидел и пытался разобрать задачу. Задается натуральное число k и перестановка чисел 1, ... , k...

Шифрование - C++
Как возможно проверить, насколько надежно шифрование?

Шифрование - C++
я написал код шифрования #include <iostream> #include <fstream> #include <string> using namespace std; main() { //~...

шифрование - C++
помогите пожалуйста написать пргорамму!!! была бы очень благодрна!!! шифрование. один из методов шифрования называется...

c++ шифрование - C++
Необходимо программно реализовать на языке C++ алгоритм шифра по Диффи – Хеллману с открытым ключом. Понятия не имею с чего начать....

Шифрование - C++
Привет всем:) особенно тем кто в этот день тратит свое время на программирование:) Помогите решить такую задачу. Есть целое число "1234"....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
26.04.2011, 19:53     cryptoapi, шифрование, 3DES #2
проца для расшифровки. может поможет)

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
DWORD Decode3Des(BYTE* input, DWORD* szInput, BYTE* key1, BYTE* key2, BYTE* key3, BYTE* iVector)
{
    HCRYPTPROV hProv;
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_DELETEKEYSET);
    if(CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)){
        
        BLOBHEADER keyHeader;
        keyHeader.bType = PLAINTEXTKEYBLOB;
        keyHeader.bVersion = CUR_BLOB_VERSION;
        keyHeader.reserved = 0;
        keyHeader.aiKeyAlg = CALG_3DES;
 
        BYTE bKey[36];
        memset(bKey, 0, 36);
        memcpy(bKey, &keyHeader, sizeof(keyHeader));
        bKey[sizeof(keyHeader)] = 24;
        memcpy(bKey + sizeof(keyHeader) + sizeof(DWORD), key1, 8);
        memcpy(bKey + sizeof(keyHeader) + sizeof(DWORD) + 8, key2, 8);
        memcpy(bKey + sizeof(keyHeader) + sizeof(DWORD) + 16, key3, 8);
 
 
        DWORD result=0;
 
        HCRYPTKEY hKey;
        if(CryptImportKey(hProv, bKey, sizeof(keyHeader) + sizeof(DWORD) + 24, NULL, 0, &hKey)){
         
            DWORD desMode = CRYPT_MODE_CBC;
            CryptSetKeyParam(hKey, KP_MODE, (BYTE*)&desMode, 0);
            
            CryptSetKeyParam(hKey, KP_IV, iVector, 0);
        
            if(CryptDecrypt(hKey, 0, TRUE, 0, input, szInput)) result = *szInput;
            
                
            CryptDestroyKey(hKey);
 
        }
 
        CryptReleaseContext(hProv,0);
 
        return result;
    }
 
    return 0;
}
Ответ Создать тему
Опции темы

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