Как конвертировать String
в SecureString
?Преобразование строки в SecureString
ответ
У вас нет. Вся причина использования объекта SecureString заключается в том, чтобы избежать создания строкового объекта (который загружается в память и хранится там в виде открытого текста до сбора мусора). Однако вы можете добавить символы в SecureString, добавив их.
var s = new SecureString();
s.AppendChar('d');
s.AppendChar('u');
s.AppendChar('m');
s.AppendChar('b');
s.AppendChar('p');
s.AppendChar('a');
s.AppendChar('s');
s.AppendChar('s');
s.AppendChar('w');
s.AppendChar('d');
Я выброшу это. Зачем?
Вы не можете просто изменить все свои строки, чтобы защитить строки, и внезапно ваше приложение «безопасно». Защищенная строка предназначена для того, чтобы держать строку зашифрованной как можно дольше и только расшифровываться в течение очень короткого периода времени, вытирая память после выполнения операции над ней.
Я бы сказал, что у вас могут возникнуть проблемы с уровнем дизайна, прежде чем беспокоиться о защите строк приложения. Дайте нам дополнительную информацию о том, что вы пытаетесь сделать, и мы сможем помочь лучше.
Я просто хочу, чтобы использовать его, чтобы установить пароль для ProcessStartInfo и запустить свой ехе, как другой пользователь. Это работало для меня ... – Nila
Мое приложение защищено, запустив его в защищенной системе. Мне было все равно, что эта строка будет зашифрована в памяти. Есть гораздо более важные сведения об этой системе, о которых нужно беспокоиться, если они когда-либо будут скомпрометированы. SecureString просто требуется Microsoft API, который моя программа должна использовать. Подразумевается, что разработчик рассматривает свой собственный прецедент и определяет, является ли преобразование строк в SecureStrings действительной операцией в контексте. – Dan
Я согласен с Спенс (+1), но если вы делаете это для обучения или тестирования pourposes, вы можете использовать Еогеасп в строке, добавляя каждый символ в SecureString с использованием метода AppendChar ,
ниже метод позволяет преобразовать строку в защищенную строку
private SecureString ConvertToSecureString(string password)
{
if (password == null)
throw new ArgumentNullException("password");
var securePassword = new SecureString();
foreach (char c in password)
securePassword.AppendChar(c);
securePassword.MakeReadOnly();
return securePassword;
}
+1, но обратите внимание, что передача пароля в виде строкового параметра создает незашифрованный экземпляр строки в управляемой памяти и в первую очередь побеждает цель «SecureString». Просто указывая это на будущих людей, которые приходят и используют этот код. – Cody
@Cody Это правда, и хороший момент, но многие из нас не заботятся, безопасно ли SecureString или нет, и используют его только потому, что некоторые Microsoft API требуют его в качестве параметра. – Dan
Вы можете следить за этим:
string password = "test";
SecureString sec_pass = new SecureString();
Array.ForEach(password.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();
unsafe
{
fixed(char* psz = password)
return new SecureString(psz, password.Length);
}
Вот это дешевый трюк LINQ.
SecureString sec = new SecureString();
string pwd = "abc123"; /* Not Secure! */
pwd.ToCharArray().ToList().ForEach(c => sec.AppendChar(c));
/* and now : seal the deal */
sec.MakeReadOnly();
Этот ответ показывает, сколько временных копий простого текста может быть сгенерировано за один выстрел –
Если вы хотите, чтобы сжать превращение string
к SecureString
в LINQ
заявление можно выразить следующим образом:
var plain = "The quick brown fox jumps over the lazy dog";
var secure = plain
.ToCharArray()
.Aggregate(new SecureString()
, (s, c) => { s.AppendChar(c); return s; }
, (s) => { s.MakeReadOnly(); return s; }
);
Однако, имейте в виду, что использование LINQ
не улучшается безопасность этого решения. Он страдает от того же недостатка, что и любое преобразование от string
до SecureString
. Пока в памяти остается оригинал string
, данные уязвимы.
Это, как говорится выше, может содержать создание SecureString
, его инициализацию данными и, наконец, блокировку его от модификации.
нет фантазии LINQ, не добавляя все символы вручную, просто и просто:
var str = "foo";
var sc = new SecureString();
foreach(char c in str) sc.appendChar(c);
даже fancier, нет необходимости определять переменную – bigworld12
вот один лайнер: 'var sc = new SecureString(); foreach (char c in "foo") sc.appendChar (c); ' – bigworld12
Существует также другой способ преобразования между SecureString
и String
.
1. Строка SecureString
SecureString theSecureString = new NetworkCredential("", "myPass").SecurePassword;
2.SecureString в строку
string theString = new NetworkCredential("", theSecureString).Password;
Вот это link
Это лучшее решение для наиболее распространенного случая использования! – Dan
Нет смысла использовать «SecureString», если ваш код создает объект 'string' со значением, которое вы хотите защитить. Цель «SecureString» заключается в том, чтобы не содержать строку в управляемой памяти, поэтому злоумышленник, изучающий эту память, может определить значение, которое вы хотите скрыть. Поскольку конструктор 'NetworkCredential', который вы вызываете, требует строки, это не путь ... Конечно, ваш код - это простой способ конвертировать в SecureString и из него, но использование этого кода делает ваш код безопасным, как простой 'string' –
Следующие 2 расширения должны сделать трюк:
Для
char
массиваpublic static SecureString ToSecureString(this char[] _self) { SecureString knox = new SecureString(); foreach (char c in _self) { knox.AppendChar(c); } return knox; }
И для
string
public static SecureString ToSecureString(this string _self) { SecureString knox = new SecureString(); char[] chars = _self.ToCharArray(); foreach (char c in chars) { knox.AppendChar(c); } return knox; }
Благодаря John Dagg для AppendChar
рекомендации.
вы можете использовать этот простой сценарий
private SecureString SecureStringConverter(string pass)
{
SecureString ret = new SecureString();
foreach (char chr in pass.ToCharArray())
ret.AppendChar(chr);
return ret;
}
Этот ответ [был размещен 15 месяцев назад] (https://stackoverflow.com/a/38326325/11683). На самом деле не было необходимости публиковать его снова. – GSerg
Простейшее подход, который может быть использован:
# Take password and convert it to a secure string
$mySS = "MyCurrentPassword" | ConvertTo-SecureString -AsPlainText -Force
- 1. Преобразование строки из базы данных в SecureString
- 2. TypeConverter для «SecureString» не поддерживает преобразование строки
- 3. Использование SecureString
- 4. Как безопасно использовать SecureString?
- 5. Создать SecureString из неуправляемой строки unicode
- 6. Сохранение SecureString
- 7. Безопасен SecureString?
- 8. Использование SecureString
- 9. Использование SecureString с LogonUser
- 10. Put SecureString в PasswordBox
- 11. SecureString в Javascript/angular2
- 12. Папка пароля wpf в SecureString в C#
- 13. Как преобразовать SecureString в System.String?
- 14. SecureString to Byte [] C#
- 15. SecureString и IIS?
- 16. Powershell TextBox SecureString
- 17. SecureString vs Hash
- 18. SecureString с ключами SecureKey
- 19. Powershell ConvertTo-SecureString ObjectNotFound
- 20. безопасно преобразовать зашифрованную стандартную строку в securestring
- 21. Rfc2898DeriveBytes + PBKDF2 + SecureString можно использовать безопасную строку вместо строки?
- 22. MySQL SecureString как строка подключения
- 23. Последовательные хэши SecureString не соответствуют
- 24. Как инициализировать SecureString для readonly
- 25. Создать SecureString с паролем SecureKey
- 26. MemoryStream to SecureString: Очистка памяти
- 27. CredUIPromptForCredentials от .NET с SecureString
- 28. не передать SecureString моего командлету
- 29. VB.NET - класс PSEXEC и SecureString?
- 30. Преобразование строки в hexdump строки
Не забудьте сделать это только для чтения s.MakeReadOnly(); – ysrb
«Комбинация' 12345' ... это то, что идиот имеет в своем багаже! » –
Все, что я вижу, это '*****' –