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

Как использовать небезопасный код в безопасном контексе?

Мне нужно использовать SecureString для класса Microsoft, и я нашел следующий код в интернет:

public static class SecureStringExt
{
    public static SecureString ConvertToSecureString(this string password)
    {
        if (password == null)
            throw new ArgumentNullException("password");

        unsafe //Red highlighted line
        {
            fixed (char* passwordChars = password)
            {
                var securePassword = new SecureString(passwordChars, password.Length);
                securePassword.MakeReadOnly();
                return securePassword;
            }
        }
    }
}

Единственная проблема заключается в том, что ключевое слово unsafe продолжает бросать мне сообщение об ошибке Cannot use unsafe construct in safe context. К сожалению, я не мог найти, почему это происходит...

Примечание: Вышеприведенный код работает в LINQPad, но не в VS2013 (с resharper).

4b9b3361

Ответ 1

Я не уверен, что вам нужен небезопасный код в этом случае (см. ответ @mybirthname).

Но когда необходим небезопасный код, его можно включить в свойствах проекта.

  • В главном меню нажмите Project, а затем <ProjectName> properties...
  • Нажмите на страницу Build.
  • Выберите Allow unsafe code.

Разрешить небезопасный код

Или можно указать /unsafe параметр компилятора явно.

Ответ 2

    public static SecureString GetSecureString(string password)
    {
        SecureString secureString = new SecureString();

        foreach (char c in password)
        {
            secureString.AppendChar(c);
        }

        secureString.MakeReadOnly();
        return secureString;
    }

Вы можете сделать то же самое без небезопасного кода.