猿问

无法将加密文本从 C# 传递到 C++ 和相反

我有一个包含 AES 加密的 c++ dll,该函数有两个输入:

  1. 字符串:使用 AES 加密

  2. 字符串:加密输出

这是外部函数:

extern "C" __declspec(dllexport) void aes_crypter(const char* string_in , wchar_t* string_out);

void aes_crypter(const char* string_in , wchar_t* string_out)

{

    std::string X_KEY = "abcdefghijklmnopqrstuvwxyz123412";

    std::string X_PSS = "612345601234512";


    //////// convert input text to LPCWSTR

    const wchar_t* inputtext = convertCharArrayToLPCWSTR(string_in);


    //////// convert LPCWSTR to string [const to string result wrong ]

    std::wstring ws(inputtext);   

    std::string str(ws.begin(), ws.end());


    //////// Encrypt

    auto encr = encrypt(str, key, X_PSS);


    //////// Convert and Return to Output String

    std::wstring widestr = std::wstring(encr.begin(), encr.end()); 

    const wchar_t* output_crypt = widestr.c_str(); /// CONVERT STD TO WCHAR

    swprintf(string_out, 4096,output_crypt);


}

代码工作正常,问题出在我的 C# 应用程序中:


这是导入功能代码:


[DllImport("simpleAES.dll",

CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]

private static extern void aes_crypter(string string_in, StringBuilder string_out);

问题 :

  • 如果我将 CharSet 设置为 ANSI,输入字符串工作正常,在 C++ 中返回正确但输出字符串仅返回一个字符错误!

  • 如果我将 CharSet 设置为 UNICODE,则输入字符串返回错误且只有一个字符。但是输出字符串返回正确!

我哪里出错了?我该如何解决?


慕运维8079593
浏览 109回答 1
1回答
随时随地看视频慕课网APP
我要回答