На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Decryption Example



This example reads the encrypted data from the file created by the "Encryption Example" (test1.xxx), decrypts it using the RC2 block cipher, and writes out the plaintext data to another file (test1.txt). The session key used to perform the decryption is read from the ciphertext file.

#include

FILE *hSource = NULL;
FILE *hDest = NULL;
int eof = 0;

HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;

#define BLOCK_SIZE 160
BYTE pbBuffer[BLOCK_SIZE];
DWORD dwCount;

BYTE *pbKeyBlob = NULL;
DWORD dwBlobLen;

// Open source file.
if((hSource=fopen("test1.xxx","rb"))==NULL) {
printf("Error opening source file!\n");
goto done;
}

// Open destination file.
if((hDest=fopen("test1.txt","wb"))==NULL) {
printf("Error opening destination file!\n");

goto done;
}

// Get handle to the default provider.
if(!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
printf("Error %x during CryptAcquireContext!\n", GetLastError());
goto done;
}

// Read key blob length from source file and allocate memory.
fread(&dwBlobLen, sizeof(DWORD), 1, hSource);
if(ferror(hSource) || feof(hSource)) {
printf("Error reading file header!\n");
goto done;
}
if((pbKeyBlob = malloc(dwBlobLen)) == NULL) {

printf("Out of memory!\n");
goto done;
}

// Read key blob from source file.
fread(pbKeyBlob, 1, dwBlobLen, hSource);
if(ferror(hSource) || feof(hSource)) {
printf("Error reading file header!\n");
goto done;
}

// Import key blob into CSP.
if(!CryptImportKey(hProv, pbKeyBlob, dwBlobLen, 0, 0, &hKey)) {
printf("Error %x during CryptImportKey!\n", GetLastError());
goto done;
}

// Decrypt source file and write to destination file.
do {

// Read up to BLOCK_SIZE bytes from source file.
dwCount = fread(pbBuffer, 1, BLOCK_SIZE, hSource);
if(ferror(hSource)) {
printf("Error reading data from source file!\n");
goto done;
}
eof=feof(hSource);

// Decrypt data.
if(!CryptDecrypt(hKey, 0, eof, 0, pbBuffer, &dwCount)) {
printf("Error %x during CryptDecrypt!\n", GetLastError());
goto done;
}

// Write data to destination file.
fwrite(pbBuffer, 1, dwCount, hDest);

if(ferror(hDest)) {
printf("Error writing data to destination file!\n");
goto done;
}
} while(!feof(hSource));

done:

// Free memory.
if(pbKeyBlob) free(pbKeyBlob);

// Destroy session key.
if(hKey != 0) CryptDestroyKey(hKey);

// Release provider handle.
if(hProv != 0) CryptReleaseContext(hProv, 0);

// Close source file.
if(hSource != NULL) fclose(hSource);

// Close destination file.
if(hDest != NULL) fclose(hDest);



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Пример Расшифровки



Этот пример читает закодированные данные из файла созданного "Шифровальным Примером" (test1.xxx), декодирует это используя блочное шифр RC2 и выписывает открытому тексту данные в другой файл (test1.txt). Сеансовая клавиша использованная, чтобы выполнять расшифровку прочитан из файла зашифрованного текста.

#include

ФАЙЛ *hSource = НЕДЕЙСТВИТЕЛЬНЫЙ;
ФАЙЛ *hDest = НЕДЕЙСТВИТЕЛЬНЫЙ;
int eof = 0;

HCRYPTPROV hProv = 0;
HCRYPTKEY hKey = 0;

#define BLOCK_SIZE 160 BYTE pbBuffer[BLOCK_SIZE];
DWORD dwCount;

БАЙТ *pbKeyBlob = НЕДЕЙСТВИТЕЛЬНЫЙ;
DWORD dwBlobLen;

// Открытый исходный файл.
если((hSource=fopen("test1.xxx","rb"))==NULL) { printf("Error, открывающий источник file!\n");
goto сделанным;
}

// Открытый файл расположения.
если((hDest=fopen("test1.txt","wb"))==NULL) { printf("Error, открывающий расположение file!\n");

goto сделанным;
}

// Получите ручку по умолчанию поставщику.
если(!CryptAcquireContext(&hProv, НЕДЕЙСТВИТЕЛЬНЫЙ, НЕДЕЙСТВИТЕЛЬНЫЙ, PROV_RSA_FULL, 0)) { printf("Error %x в течение CryptAcquireContext!\n", GetLastError());
goto сделанным;
}

// Прочитанная ключевая длина капли из исходного файла и распределяет память.
fread(&dwBlobLen, sizeof(DWORD), 1, hSource);
если(ferror(hSource) || feof(hSource)) { printf("Error, читающий файл header!\n");
goto сделанным;
}
если((pbKeyBlob = malloc(dwBlobLen)) == НЕДЕЙСТВИТЕЛЬНЫЙ) {

printf("Out memory!\n");
goto сделанным;
}

// Прочитанная ключевая капля из исходного файла.
fread(pbKeyBlob, 1, dwBlobLen, hSource);
если(ferror(hSource) || feof(hSource)) { printf("Error, читающий файл header!\n");
goto сделанным;
}

// Импортируйте ключевую каплю в CSP.
если(!CryptImportKey(hProv, pbKeyBlob, dwBlobLen, 0, 0, &hKey)) { printf("Error %x В ТЕЧЕНИЕ CryptImportKey!\n", GetLastError());
goto сделанным;
}

// Декодируйте исходный файл и записывайтесь в файл расположения.
сделайте {

// Прочитанное вплоть до байтов BLOCK_SIZE из исходного файла.
dwCount = fread(pbBuffer, 1, BLOCK_SIZE, hSource);
если(ferror(hSource)) {
printf("Error, читающий данные из источника file!\n");
goto сделанным;
}
eof=feof(hSource);

// Декодируйте данные.
если(!CryptDecrypt(hKey, 0, eof, 0, pbBuffer, &dwCount)) { printf("Error %x В ТЕЧЕНИЕ CryptDecrypt!\n", GetLastError());
goto сделанным;
}

// Запишите данные в файл расположения.
fwrite(pbBuffer, 1, dwCount, hDest);

если(ferror(hDest)) {
printf("Error, пишущий данные в расположение file!\n");
goto сделанным;
}
} пока(!feof(hSource));

сделанным:

// Свободная память.
если(pbKeyBlob) свободный(pbKeyBlob);

// Уничтожьте сеансовую клавишу.
если(hKey != 0) CryptDestroyKey(hKey);

// Ручка поставщика Версии.
если(hProv != 0) CryptReleaseContext(hProv, 0);

// Закрытый исходный файл.
если(hSource != НЕДЕЙСТВИТЕЛЬНЫЙ), fclose(hSource);

// Закрытый файл расположения.
если(hDest != НЕДЕЙСТВИТЕЛЬНЫЙ), fclose(hDest);



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz