为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕运维8079593 2021-06-03 18:09:43
我有一个包含 AES 加密的 c++ dll,该函数有两个输入:字符串:使用 AES 加密字符串:加密输出这是外部函数: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,则输入字符串返回错误且只有一个字符。但是输出字符串返回正确!我哪里出错了?我该如何解决?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信