Как преобразовать строку в кодировке Base64 непосредственно в SecureString - PullRequest
0 голосов
/ 07 января 2019

Мне нужно преобразовать строку в кодировке base64 в SecureString без использования обычной строки C #, чтобы предотвратить сохранение пароля в памяти в виде открытого текста.

Сейчас у меня есть код, который делает это:

string encodedPassword = "TXlQYXNzd29yZA==";
byte[] encodedBytes = Convert.FromBase64String(encodedPassword);
string clearTextPassword = Encoding.UTF8.GetString(encodedBytes);
SecureString secureString = ConvertToSecureString(clearTextPassword);

Я бы хотел что-то вроде этого: Convert.FromBase64StringToSecureString (EncodedPassword)

1 Ответ

0 голосов
/ 08 января 2019

В итоге я написал следующий метод, использующий метод GetChars (), а затем очистил массив после его использования. Есть вероятность, что что-то может остаться в памяти, если во время выполнения возникнет исключение, но я не обеспокоен этим случаем.

private static SecureString DecodeBase64String(string encodedData)
{
    var secureString = new SecureString();

    if (string.IsNullOrWhiteSpace(encodedData))
    {
        secureString.MakeReadOnly();
        return secureString;
    }
    try
    {
        var encodedBytes = Convert.FromBase64String(encodedData);
        var passwordChars = Encoding.UTF8.GetChars(encodedBytes);

        // clear the encoded bytes so they aren't resident in memory
        for (var i = 0; i < encodedBytes.Length; i++)
        {
            encodedBytes[i] = 0;
        }

        foreach (var c in passwordChars)
        {
            secureString.AppendChar(c);
        }

        // clear the password characters so they aren't resident in memory
        for (var i = 0; i < passwordChars.Length; i++)
        {
            passwordChars[i] = (char)0;
        }

        secureString.MakeReadOnly();
        return secureString;
    }
    catch (FormatException)
    {
        secureString.MakeReadOnly();
        return secureString;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...