Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Klasa SecureString

.NET Framework (current version)
 

Data opublikowania: październik 2016

Reprezentuje tekst, który powinny być poufne, takie jak, usuwając go w pamięci komputera, gdy nie są już potrzebne. Klasa ta nie może być dziedziczona.

Przestrzeń nazw:   System.Security
Zestaw:  mscorlib (w mscorlib.dll)

System.Object
  System.Security.SecureString

public sealed class SecureString : IDisposable

NazwaOpis
System_CAPS_pubmethodSecureString()

Inicjuje nowe wystąpienie SecureString klasy.

System_CAPS_pubmethodSecureString(Char*, Int32)

Ten interfejs API obsługuje infrastrukturę produkt i nie jest przeznaczony do użycia bezpośrednio w kodzie. Inicjuje nowe wystąpienie SecureString klasy z podtablica z System.Char obiektów.

Ten konstruktor nie jest zgodne ze specyfikacją CLS. Alternatywa zgodna ze zgodnym ze specyfikacją CLS to SecureString.SecureString().

NazwaOpis
System_CAPS_pubpropertyLength

Pobiera liczbę znaków w ciągu bieżącej bezpieczne.

NazwaOpis
System_CAPS_pubmethodAppendChar(Char)

Dołącza znak na końcu bieżącej bezpieczny ciąg.

System_CAPS_pubmethodClear()

Usuwa wartość bieżącą bezpieczny ciąg.

System_CAPS_pubmethodCopy()

Tworzy kopię bieżącego bezpieczny ciąg.

System_CAPS_pubmethodDispose()

Zwalnia wszystkie zasoby używane przez bieżącą SecureString obiektu.

System_CAPS_pubmethodEquals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.(Dziedziczone z Object).

System_CAPS_pubmethodGetHashCode()

Służy jako domyślna funkcji mieszania.(Dziedziczone z Object).

System_CAPS_pubmethodGetType()

Pobiera Type bieżącego wystąpienia.(Dziedziczone z Object).

System_CAPS_pubmethodInsertAt(Int32, Char)

Wstawia znak w tym ciągu bezpiecznego w położeniu określonego indeksu.

System_CAPS_pubmethodIsReadOnly()

Wskazuje, czy to bezpieczny ciąg jest oznaczony jako tylko do odczytu.

System_CAPS_pubmethodMakeReadOnly()

Powoduje, że wartość to bezpieczny ciąg tekstu tylko do odczytu.

System_CAPS_pubmethodRemoveAt(Int32)

Usuwa znak na pozycji określony indeks z tym bezpieczny ciąg.

System_CAPS_pubmethodSetAt(Int32, Char)

Zamienia istniejący znak na pozycji określony indeks inny znak.

System_CAPS_pubmethodToString()

Zwraca ciąg, który reprezentuje bieżący obiekt.(Dziedziczone z Object).

SecureStringjest typu ciąg, który zawiera miary zabezpieczeń. Próbuje uniknąć przechowywanie potencjalnie poufnych ciągów w pamięci procesu jako zwykły tekst. (Ograniczenia, jednak dla Jak bezpieczne jest SecureString? sekcji.) Wartość wystąpienia SecureString jest automatycznie chronione przy użyciu mechanizmu obsługiwane przez podstawowej platformy po zainicjowaniu wystąpienia lub modyfikacji wartości. Aplikacja może renderować niezmienialne wystąpienie i uniknąć dalszych zmiany wywołując MakeReadOnly metody.

Maksymalna długość SecureString wystąpienia wynosi 65 536 znaków.

System_CAPS_importantWażne

Ten typ implementuje IDisposable interfejsu. Po zakończeniu za pomocą wystąpienia typu bezpośrednio lub pośrednio należy usunąć z niego. Do usuwania tego typu, należy wywołać jej Dispose metody w try/catch bloku. Aby usunąć ją pośrednio, użyj konstrukcji języka takiego jak using (w języku C#) lub Using (w języku Visual Basic). Aby uzyskać więcej informacji, zobacz sekcję "Przy użyciu obiektu który implementuje interfejs IDisposable" w IDisposable interfejsu tematu.

SecureString Klasy i jej elementów członkowskich nie są widoczne dla modelu COM. Aby uzyskać więcej informacji, zobacz ComVisibleAttribute.

W tej sekcji:

Ciąg wersji programu vs. SecureString
Operacje SecureString
SecureString i międzyoperacyjne
Jak bezpieczne jest SecureString?

Wystąpienie System.String klasy jest niezmienialny i, gdy nie są już potrzebne, nie może być programowo zaplanowane do wyrzucanie elementów bezużytecznych; wystąpienia jest tylko do odczytu po utworzeniu i nie jest możliwe do przewidzenia, jeśli wystąpienie zostanie usunięty z pamięci komputera. Ponieważ System.String wystąpienia są niezmienne, operacje, które są wyświetlane, aby zmodyfikować istniejące wystąpienie faktycznie utwórz jego kopię do manipulowania. W związku z tym jeśli String obiektu zawiera poufne informacje, takie jak hasła, numer karty kredytowej lub dane osobowe, istnieje ryzyko informacje mogą uzyskać dostęp, gdy jest używane, ponieważ aplikacja nie może usunąć dane z pamięci komputera.

A SecureString obiektu jest podobny do String obiektów w tym ma wartość tekstową. Jednak wartość SecureString obiekt jest przypięta w pamięci, może używać mechanizm ochrony, takie jak szyfrowania, obsługiwanego przez system operacyjny, można modyfikować, dopóki aplikacja oznacza je jako tylko do odczytu i może być usunięty z pamięci komputera przez użytkownika aplikacji telefonicznej Dispose — metoda lub przez moduł zbierający elementy bezużyteczne .NET Framework.

Aby uzyskać informacje dotyczące ograniczenia SecureString , zobacz jak bezpieczne SecureString jest? sekcji.

Powrót do początku

SecureString Klasa zawiera elementy członkowskie, które umożliwiają wykonywanie następujących czynności:

Utwórz wystąpienie SecureString obiektu

Można utworzyć wystąpienia SecureString obiektu przez wywołanie jego konstruktora bez parametrów.

Dodawanie znaków SecureString obiektu

Można dodać jednego znaku w czasie, aby SecureString obiektu przez wywołanie jego AppendChar lub InsertAt metody.

System_CAPS_importantWażne

A SecureString obiekt nigdy nie powinien być skonstruowany na podstawie String, ponieważ dane poufne już podlega konsekwencje trwałości pamięci niezmienne String klasy. Najlepszym sposobem tworzenia SecureString obiekt jest niezarządzanego źródła znaku w czasie, takie jak Console.ReadKey metody.

Usuń znaki z SecureString obiektu

Można zastąpić indywidualnym przez wywołanie metody SetAt metody, Usuń znak poszczególnych przez wywołanie metody RemoveAt metody lub Usuń wszystkie znaki od SecureString wystąpienia przez wywołanie metody Clear — metoda.

Wprowadź SecureString obiektu tylko do odczytu

Po zdefiniowaniu ciąg który SecureString reprezentuje obiekt, należy wywołać jej MakeReadOnly metodę, aby oznaczyć ciąg tylko do odczytu.

Uzyskiwanie informacji SecureString obiektu

SecureString Klasa ma tylko dwa elementy członkowskie, które udostępniają informacje na temat ciągu: jego Length właściwość, która wskazuje liczbę jednostek kodu UTF16 zakodowane w ciągu; i IsReadOnly, metody, która wskazuje, czy wystąpienie jest tylko do odczytu.

Zwolnij pamięć przydzielona programowi SecureString wystąpienia

Ponieważ SecureString implementuje IDisposable interfejsu, zwolnij pamięci przez wywołanie metody Dispose metody.

SecureString Klasa nie ma elementów członkowskich inspekcję, porównaj lub przekonwertować wartości SecureString. Braku takich członków pomaga w ochronie wartość wystąpienia przed przypadkowym lub złośliwymi zagrożeń. Użyć odpowiednich członków grupy System.Runtime.InteropServices.Marshal klas, takich jak SecureStringToBSTR metody do manipulowania wartość SecureString obiektu.

Biblioteka klas programu .NET Framework często używa SecureString wystąpień w następujący sposób:

Powrót do początku

Ponieważ system operacyjny nie obsługuje bezpośrednio SecureString, należy przekonwertować wartość SecureString obiektu na typ ciągu wymagana przed przekazaniem ciąg do metody natywnej. Marshal Klasa ma pięć metod, które w tym:

Każda z tych metod tworzy ciąg zwykłego tekstu w pamięci niezarządzanej. Jest odpowiedzialny za deweloperowi zero wychodzących i zwolnić pamięć tego, jak jest już potrzebne. Każdej z metod alokacji konwersji i pamięć ciąg ma odpowiedniej metody do zera limit oraz o wolnym alokacji pamięci:

Metoda alokacji i konwersji

Zero i free — metoda

Marshal.SecureStringToBSTR

Marshal.ZeroFreeBSTR

Marshal.SecureStringToCoTaskMemAnsi

Marshal.ZeroFreeCoTaskMemAnsi

Marshal.SecureStringToCoTaskMemUnicode

Marshal.ZeroFreeCoTaskMemUnicode

Marshal.SecureStringToGlobalAllocAnsi

Marshal.ZeroFreeGlobalAllocAnsi

Marshal.SecureStringToCoTaskMemUnicode

Marshal.ZeroFreeGlobalAllocUnicode

Powrót do początku

Podczas tworzenia prawidłowo, SecureString wystąpienia chroni więcej danych niż String. Podczas tworzenia ciąg ze źródła znaku w czasie String tworzy wiele obiektów w pamięci, podczas gdy SecureString tworzy tylko jedno wystąpienie. Wyrzucanie elementów bezużytecznych z String obiektów jest deterministyczna. Ponadto, ponieważ jego pamięci nie jest przypięty, moduł zbierający elementy bezużyteczne spowoduje dodatkowych kopii String wartości po przenoszenie i kompaktowanie pamięci. Z kolei ilość pamięci przydzielona do SecureString obiektu jest przypięty i pamięci, może zostać zwolniony przez wywołanie metody Dispose metody.

Mimo że dane przechowywane w SecureString wystąpienia jest bezpieczniejsza niż dane przechowywane w String wystąpienia, występują znaczne ograniczenia w sposób bezpieczny SecureString wystąpienie jest. Należą do nich następujące elementy:

Platforma

W systemie operacyjnym Windows, zawartość SecureString tablicy znaków wewnętrzny instancji są szyfrowane. Jednak czy ze względu na Brak interfejsów API lub problemy dotyczące zarządzania kluczami, szyfrowanie nie jest dostępne na wszystkich platformach. W związku z tym SecureString jest dostępny na pulpicie (tylko system Windows), a nie na .NET Core.

Czas trwania

Nawet jeśli SecureString implementacji jest w stanie korzystać z szyfrowania, zwykły tekst przypisany do SecureString wystąpienie może zostać uwidoczniona w różnym czasie:

  • Ponieważ system Windows nie oferują implementacji bezpieczny ciąg, na poziomie systemu operacyjnego, programu .NET Framework jest nadal ma można przekonwertować wartości bezpieczny ciąg do jej reprezentacji w postaci zwykłego tekstu, aby można było go używać.

  • Zawsze, gdy wartość bezpieczny ciąg jest modyfikowana za pomocą metod takich jak AppendChar lub RemoveAt, musi być odszyfrowane (tj. przekonwertowany z powrotem na zwykły tekst), modyfikować i ponownie szyfrowane.

  • Jeśli bezpieczny ciąg jest używany w wywołaniu międzyoperacyjnego, muszą zostać skonwertowane do ciągu ANSI, ciąg Unicode lub ciąg binarny (BSTR). Aby uzyskać więcej informacji, zobacz SecureString i międzyoperacyjne sekcji.

Przedział czasu, dla którego SecureString wartość wystąpienia jest widoczna tylko jest skrócona, w porównaniu z String klasy.

Porównanie użycia magazynów

Ogólnie rzecz biorąc SecureString klasa definiuje mechanizm magazynu wartości ciągów, które powinny być chronione lub poufne. Poza .NET Framework sam mechanizm użycia obsługuje jednak SecureString. Oznacza to, że bezpieczny ciąg musi zostać przekonwertowany do użytecznej postaci (zwykle w postaci zwykłego tekstu), który może zostać rozpoznany przez jego obiekt docelowy i że odszyfrowywania i konwersji musi przypadać w przestrzeni.

Ogólne SecureString jest bezpieczniejsza niż String ponieważ ogranicza ujawnienia danych poufnych ciągu. Jednak te ciągi nadal mogą być narażone na proces ani operacja, która ma dostęp do pamięci, takich jak złośliwe procesu uruchomionego na komputerze-hoście, zrzutu procesu lub plik wymiany widoczny dla użytkownika. Zamiast SecureString do ochrony haseł, zalecaną alternatywą jest użycie nieprzezroczystego uchwyt poświadczenia, które są przechowywane poza procesem.

Powrót do początku

W poniższym przykładzie pokazano sposób użycia SecureString do bezpiecznego hasła użytkownika do użycia jako poświadczenie, aby uruchomić nowego procesu.

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Security;

public class Example
{
    public static void Main()
    {
        // Instantiate the secure string.
        SecureString securePwd = new SecureString();
        ConsoleKeyInfo key;

        Console.Write("Enter password: ");
        do {
           key = Console.ReadKey(true);

           // Ignore any key out of range.
           if (((int) key.Key) >= 65 && ((int) key.Key <= 90)) {
              // Append the character to the password.
              securePwd.AppendChar(key.KeyChar);
              Console.Write("*");
           }   
        // Exit if Enter key is pressed.
        } while (key.Key != ConsoleKey.Enter);
        Console.WriteLine();

        try {
            Process.Start("Notepad.exe", "MyUser", securePwd, "MYDOMAIN");
        }
        catch (Win32Exception e) {
            Console.WriteLine(e.Message);
        }
        finally {
           securePwd.Dispose();
        }
    }
}

.NET Framework
Dostępne od 2.0

Wszystkie publiczne statyczne ( Shared w języku Visual Basic) elementy członkowskie tego typu są wątkowo bezpieczne. Dla żadnych elementów członkowskich wystąpień nie ma gwarancji bezpieczeństwa wątkowego.

Powrót do początku
Pokaż: