Crypto API выдает ошибку при работе в японской версии ОС (вызов из .NET) - PullRequest
0 голосов
/ 19 марта 2012

Я кодировал свое приложение (Windows UI in .NET) в английской языковой системе. У меня есть настройки для шифрования / дешифрования данных, которые я сделал с помощью WinCrypto API в VC ++, ссылался на эту DLL в моем приложении .NET. Эта настройка хорошо работает в английской локали и не работает в японской версии.

Мне не удалось найти проблему в VC ++, пока я использую Unicode для этой цели.

Я получаю исключение в методе CryptDecrypt(). Возвращает 0 при работе в японской версии.

bRet = CryptDecrypt( hKey, 0, TRUE, 0, pbTargetBuffer, &dwCryptDataLen ); 

Эта функция работает на английском языке.

Что-то, что я пропустил с первого взгляда?

Обновление : bRet равен 0, а значение GetLastError() равно 2148073477. Угадай свои плохие данные. Но я не уверен в исправлении моих данных. Он показывает различные символы (в коде C ++), хотя я передал правильные символы из C #.

Вот как я определил свою функцию в C ++:

__declspec(dllexport) int DoDecryption( LPCTSTR chEncryptedData_i, 
                                        LPCTSTR chPassword_i, 
                                        unsigned char chDecryptedData_o[] )
{
    // ...
}

Я пробовал char*, а также wchar_t* вместо LPCTSTR.

...