0 голосов
спросил от в категории MFCVisualC
Можно найти множество предложений #here # [#^ #].

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Я решил эту проблему с помощью Crypto API.



Перейти к ..
>
#http://msdn.microsoft.com/en-us/library/windows/desktop/aa379924%28v=vs.85%29.aspx # [#^ #]

Вот основные шаги для шифрования/дешифрования данных с использованием Crypto APIs
[Шаг-1] Инициирование поставщика услуг шифрования (CSP): CryptAcquireContext, CryptReleaseContext
Функция CryptAcquireContext используется для получения дескриптора конкретного контейнера ключа внутри конкретный CSP. Этот возвращенный дескриптор можно затем использовать для совершения вызовов на выбранный CSP.

В конце шифрования/дешифрования вы можете вызвать функцию CryptReleaseContext, чтобы освободить дескриптор, возвращенный из вызова в CryptAcquireContext.

[Шаг-2] Хеширование данных: CryptCreateHash, CryptHashData, CryptGetHashParam и CryptDestroyHash

Чтобы получить значение хеша из пароля, сначала создайте хэш-объект, используя CryptCreateHash, тогда вы можете вызвать CryptHashData, чтобы получить значение хэша, полученное из вашего пароля.

[Шаг-3] Создание ключей: CryptDeriveKey, CryptGenKey, CryptDestroyKey
Эти три функции - это те, которые используются для создания дескрипторов ключей:

CryptDeriveKey Функция используется для генерации ключа из указанного пароля.
Функция CryptGenKey используется для генерации ключа из случайных сгенерированных данных.
Функция CryptDestroyKey используется для освобождения дескриптора ключевой объект.


[Шаг-4] Шифрование и дешифрование данных: CryptEncrypt, CryptDecrypt
На этом этапе вы создаете буфер для простого текста или шифрованный текст (зашифрованный текст) для вызова CryptEncrypt/CryptDecrypt, а затем вы можете вызвать CryptEncrypt для шифрования или CryptDecrypt для дешифрования.

[Шаг-5] Очистка: CryptDestroyKey, CryptDestroyHash, CryptReleaseContext
После завершения шифрования/дешифрования вы должны очистить ресурсы, взятые Crypto Apis. Очистка требует следующих шагов: - Уничтожьте ключ сеанса с помощью CryptDestroyKey
- Уничтожьте ключ ключа обмена ключами с помощью CryptDestroyKey
- Уничтожьте хэш-объект с помощью CryptDestroyHash
- дескриптор поставщика контекста выпуска с использованием CryptReleaseContext
0 голосов
ответил от
Я решил вашу проблему ... Пожалуйста, найдите обновленный код, который шифрует и расшифровывает по мере необходимости. Проблема заключалась в длине, которую вы принимали. Вы пытались зашифровать текст Unicode, но используя strlen, который всегда возвращает вам длину 2. Таким образом, текст, который идет для шифрования, имеет только 2 байта, но который отличается от фактические байты, в которых он нуждался. :) Наслаждайтесь
void main() {         wchar_t password[] = L"Hello world of data protection."; DATA_BLOB DataIn; DATA_BLOB DataOut; DATA_BLOB DataVerify; LPWSTR pDescrOut = NULL; BYTE *pbDataInput =(BYTE *)password; DWORD cbDataInput = wcslen(password)*2+1; DataIn.pbData = pbDataInput;     DataIn.cbData = cbDataInput; if(CryptProtectData(  &DataIn,  L"This is the description string.", // A description string.   NULL,                               // Optional entropy  // not used.  NULL,                               // Reserved.  NULL,                      // Pass a PromptStruct.  0,  &DataOut)) {  printf("The encryption phase worked. n"); } else { printf("Encryption error!"); } //------------------------------------------------------------------- //   Begin unprotect phase. if (CryptUnprotectData( &DataOut, &pDescrOut, NULL,                 // Optional entropy NULL,                 // Reserved NULL,        // Optional PromptStruct 0, &DataVerify)) {  printf("The decrypted data is: %Sn", DataVerify.pbData);  printf("The description of the data was: %Sn",pDescrOut); } else { MyHandleError("Decryption error!"); } //------------------------------------------------------------------- //  Clean up. LocalFree(pDescrOut); LocalFree(DataOut.pbData); LocalFree(DataVerify.pbData); }

Категории

Добро пожаловать на сайт DraftingCode Q&A, где вы можете задавать вопросы и получать ответы от других членов сообщества.

Похожие вопросы

0 голосов
0 ответов
0 голосов
0 ответов
0 голосов
0 ответов
спросил 20 Июнь, 17 от jochen arndt в категории MFCVisualC
0 голосов
0 ответов
спросил 31 Янв, 13 от merano в категории MFCVisualC
...