2015-12-03 3 views
0

У меня есть SecureString в моем коде на C#, который мне нужно передать в DLL. Я бы предпочел не делать Marshalling, поскольку кажется, что когда это происходит, SecureString не шифруется (и, следовательно, не защищается). Итак, вопрос в том, есть ли эквивалент C# SecureString в C++, чтобы я мог передать SecureString из моего кода C# в C++ DLL ... или если есть лучший/другой способ, так что мне не нужно дешифровать SecureString передать его в DLL.Есть ли эквивалент C# SecureString в C++?

+1

http://stackoverflow.com/questions/1508082/how-is-a-securestring-marshalled-to-unmanaged-code – Ralf

+0

Вы только собираетесь, чтобы иметь возможность отправлять, что как простой текст, возможно, выглядят при использовании ProtectedData.Protect в C# и CryptUnprotectData на C++, оба используют DPAPI –

+0

@ Ralf Я специально сказал, что пытался избежать маршалинга. – njbuwm

ответ

1

Предполагая, что ваш компилятор C++ нацелен на Common Language Runtime (CLR), вы можете использовать ту же самую реализацию SecureString.

using namespace System; 
using namespace System::Security; 

int main(array<System::String ^> ^args) 
{ 
    // Define the string value to assign to a new secure string. 
    Char chars[4] = { 't', 'e', 's', 't' }; 
    // Instantiate the secure string. 
    SecureString^ testString = gcnew SecureString(); 
    // Assign the character array to the secure string. 
    for each (Char ch in chars) 
    { 
     testString->AppendChar(ch); 
    } 
    // Display secure string length. 
    Console::WriteLine("The length of the string is {0} characters.", 
         testString->Length); 

    delete testString; 
    return 0; 
} 
// The example displays the following output: 
//  The length of the string is 4 characters 4 characters 
Смежные вопросы