Ответ 1
Простой ответ заключается в том, что ни один из методов, которые вы предлагаете, не защищен. И как только вы вводите пароль в StringBuilder
, игра заканчивается. Не используйте StringBuilder
для хранения пароля, вместо этого используйте SecureString
, если вам нужно использовать управляемый класс.
Теперь вы говорите в комментариях, что вы вызываете CredUIPromptForCredentials
. Так что сделайте это, но не вводите пароль в StringBuilder
. Поместите его в неуправляемую память, например, выделенную с помощью Marshal.AllocHGlobal
. Затем, когда вы закончите с этой неуправляемой памятью, сделайте то, что говорят docs для CredUIPromptForCredentials
и вызывайте SecureZeroMemory
, прежде чем освободить неуправляемую память.
Я отмечаю, что pinvoke.net использует StringBuilder
для параметра пароля. Возможно, это и привело вас в заблуждение. Вам не нужно это делать (вы не должны этого делать). Объявите параметр вместо типа IntPtr
.