Подтвердить что ты не робот

Преобразовать строку в SecureString

Как преобразовать String в SecureString?

4b9b3361

Ответ 1

Нет. Вся причина использования объекта 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');

Ответ 2

ниже метод помогает преобразовать строку в защищенную строку

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;
}

Ответ 3

Существует также другой способ преобразования между SecureString и String.

1. Строка в SecureString

SecureString theSecureString = new NetworkCredential("", "myPass").SecurePassword;

2. SecureString to String

string theString = new NetworkCredential("", theSecureString).Password;

Вот ссылка

Ответ 4

Вы можете следить за этим:

string password = "test";
SecureString sec_pass = new SecureString();
Array.ForEach(password.ToArray(), sec_pass.AppendChar);
sec_pass.MakeReadOnly();

Ответ 5

unsafe 
{
    fixed(char* psz = password)
        return new SecureString(psz, password.Length);
}

Ответ 6

Я выброшу это. Почему?

Вы не можете просто изменить все свои строки для защиты строк и вдруг ваше приложение "безопасно". Защищенная строка предназначена для того, чтобы держать строку зашифрованной как можно дольше и только расшифровываться в течение очень короткого периода времени, вытирая память после выполнения операции над ней.

Я бы сказал, что у вас могут возникнуть проблемы с уровнем дизайна, прежде чем беспокоиться о защите строк приложений. Дайте нам дополнительную информацию о том, что вы пытаетесь сделать, и мы сможем помочь лучше.

Ответ 7

Вот дешевый трюк 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();

Ответ 8

Я согласен с Spence (+1), но если вы делаете это для обучения или тестирования, вы можете использовать foreach в строке, добавляя каждый char к securestring, используя метод AppendChar.

Ответ 9

нет фантазии linq, не добавляя все символы вручную, просто и просто:

var str = "foo";
var sc = new SecureString();
foreach(char c in str) sc.appendChar(c);

Ответ 10

Если вы хотите сжать преобразование 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, его инициализации с данными и, наконец, блокировки его из модификации.

Ответ 11

вы можете использовать этот простой script

private SecureString SecureStringConverter(string pass)
{
    SecureString ret = new SecureString();

    foreach (char chr in pass.ToCharArray())
        ret.AppendChar(chr);

    return ret;
}

Ответ 12

Следующие 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.