В proxy.exe я создаю защищенную строку следующим образом:Почему шифрование SecureString дает разные результаты между исполняемыми файлами?
public SecureString GetSecureEncryptionKey()
{
string strPassword = "8charPwd";
SecureString secureStr = new SecureString();
if (strPassword.Length > 0)
{
foreach (var c in strPassword.ToCharArray()) secureStr.AppendChar(c);
}
return secureStr;
}
Тогда в main.exe Я дешифрования его с помощью этой функции:
public string convertToUNSecureString(SecureString secstrPassword)
{
IntPtr unmanagedString = IntPtr.Zero;
try
{
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(secstrPassword);
return Marshal.PtrToStringUni(unmanagedString);
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString);
}
}
вопрос является что возвращенная строка пуста, если я не зашифрую исходную строку в пределах main.exe, тогда возвращаемая расшифрованная строка действительно «8charPwd». Почему это происходит? Шифрование SecureString связано с исполняемым файлом?
Одна вещь, которую я хотел бы отметить, что вас» re делает безопасную строку совершенно бесполезной благодаря жесткому кодированию 'string strPassword =" 8charPwd ";'. Это как запирать дверь в ваш дом и подвешивать ключи рядом с ней. –
Спасибо, что указали это, но бесполезно указывать на это, потому что приложение, содержащее фактическую строку, защищено на стороне сервера/декомпилировано, и оно предназначено для работы менее секунды, чтобы отправить защищенную строку в основное приложение , Моя проблема в том, что secureString не расшифровывается, как следует. – IneedHelp
Общее назначение SecureString - хранить пароли * в памяти * зашифрованы. Поэтому, если вы делаете дамп памяти, сложнее узнать, где находится пароль. SecureString хранит данные в адресном пространстве одного процесса. Поэтому мне интересно, как вы передаете SecureString между процессами? –