SecureString Sınıf

Tanım

Artık gerekli olmadığında bilgisayar belleğinden silerek, gizli tutulması gereken metni temsil eder.Represents text that should be kept confidential, such as by deleting it from computer memory when no longer needed. Bu sınıf devralınamaz.This class cannot be inherited.

public ref class SecureString sealed : IDisposable
public sealed class SecureString : IDisposable
type SecureString = class
    interface IDisposable
Public NotInheritable Class SecureString
Implements IDisposable
Devralma
SecureString
Uygulamalar

Örnekler

Aşağıdaki örnek, yeni bir işlemi başlatmak için bir kullanıcının parolasını kimlik bilgisi olarak kullanmak üzere güvenli hale getirmek için bir SecureString nasıl kullanacağınızı gösterir.The following example demonstrates how to use a SecureString to secure a user's password for use as a credential to start a new process.

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();
        }
    }
}
Imports System.ComponentModel
Imports System.Diagnostics
Imports System.Security

Public Class Example
    Public Shared Sub Main()
        ' Instantiate the secure string.
        Dim securePwd As New SecureString()
        Dim key As ConsoleKeyInfo
        
        Console.Write("Enter password: ")
        Do
           key = Console.ReadKey(True)

           ' Ignore any key out of range
           If CInt(key.Key) >= 65 And CInt(key.Key <= 90) Then    
              ' Append the character to the password.
              securePwd.AppendChar(key.KeyChar)
              Console.Write("*")
           End If                                    
        ' Exit if Enter key is pressed.
        Loop While key.Key <> ConsoleKey.Enter
        Console.WriteLine()
        
        Try
            Process.Start("Notepad.exe", "MyUser", securePwd, "MYDOMAIN")
        Catch e As Win32Exception
            Console.WriteLine(e.Message)
        Finally
           securePwd.Dispose()
        End Try
    End Sub
End Class

Açıklamalar

Önemli

Yeni geliştirme için SecureString sınıfını kullanmanızı önermiyoruz.We don't recommend that you use the SecureString class for new development. Daha fazla bilgi için bkz. GitHub 'da SecureString kullanılmamalıdır .For more information, see SecureString shouldn't be used on GitHub.

SecureString, güvenlik ölçüsü sağlayan bir dize türüdür.SecureString is a string type that provides a measure of security. İşlem belleğinde büyük olasılıkla hassas dizeleri düz metin olarak depolamayı önlemeye çalışır.It tries to avoid storing potentially sensitive strings in process memory as plain text. (Ancak sınırlamalar için bkz. güvenli hale getirme: SecureString nedir? bölümü) Bir SecureString örneğinin değeri, örnek başlatıldığında veya değer değiştirildiğinde temel alınan platformun desteklediği bir mekanizma kullanılarak otomatik olarak korunur.(For limitations, however, see the How secure is SecureString? section.) The value of an instance of SecureString is automatically protected using a mechanism supported by the underlying platform when the instance is initialized or when the value is modified. Uygulamanız örneği sabit işleyebilir ve MakeReadOnly yöntemini çağırarak daha fazla değişikliğe engel olabilir.Your application can render the instance immutable and prevent further modification by invoking the MakeReadOnly method.

SecureString örneğinin maksimum uzunluğu 65.536 karakterdir.The maximum length of a SecureString instance is 65,536 characters.

Önemli

Bu tür IDisposable arabirimini uygular.This type implements the IDisposable interface. Türünün bir örneğini kullanmayı bitirdiğinizde, bunu doğrudan veya dolaylı olarak atabilirsiniz.When you have finished using an instance of the type, you should dispose of it either directly or indirectly. Türü doğrudan atmak için Dispose yöntemini bir try/catch bloğunda çağırın.To dispose of the type directly, call its Dispose method in a try/catch block. Dolaylı olarak atmak için using (içinde C#) veya Using (Visual Basic) gibi bir dil yapısı kullanın.To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). Daha fazla bilgi için, IDisposable arabirimi konusunun "IDisposable uygulayan bir nesne kullanma" bölümüne bakın.For more information, see the "Using an Object that Implements IDisposable" section in the IDisposable interface topic.

SecureString sınıfı ve üyeleri COM 'a görünür değildir.The SecureString class and its members are not visible to COM. Daha fazla bilgi için bkz. ComVisibleAttribute.For more information, see ComVisibleAttribute.

Bu bölümde:In this section:

Dize ve SecureString karşılaştırmasıString vs. SecureString
SecureString işlemleri SecureString operations
SecureString ve ınterop SecureString and interop
SecureString ne kadar güvenlidir?How secure is SecureString?

Dize ve SecureStringString versus SecureString

System.String sınıfının bir örneği her ikisi de sabittir ve artık gerekli olmadığında çöp toplama için programlı olarak zamanlanamaz; diğer bir deyişle, örnek oluşturulduktan sonra salt okunurdur ve örneğin bilgisayar belleğinden ne zaman silineceğini tahmin etmek mümkün değildir.An instance of the System.String class is both immutable and, when no longer needed, cannot be programmatically scheduled for garbage collection; that is, the instance is read-only after it is created, and it is not possible to predict when the instance will be deleted from computer memory. System.String örnekleri sabit olduğundan, var olan bir örneği değiştirmek için görüntülenen işlemler gerçekten onu işlemek için bir kopyasını oluşturur.Because System.String instances are immutable, operations that appear to modify an existing instance actually create a copy of it to manipulate. Sonuç olarak, bir String nesnesi parola, kredi kartı numarası veya kişisel veriler gibi hassas bilgiler içeriyorsa, uygulamanız bilgisayar belleğinden verileri silemediğinden, bilgilerin kullanıldıktan sonra açığa çıkmasına neden olma riski vardır.Consequently, if a String object contains sensitive information such as a password, credit card number, or personal data, there is a risk the information could be revealed after it is used because your application cannot delete the data from computer memory.

Bir SecureString nesnesi, metin değeri olan bir String nesnesine benzerdir.A SecureString object is similar to a String object in that it has a text value. Ancak, bir SecureString nesnesinin değeri bellekte sabitlenmiştir, bu, temel işletim sistemi tarafından sağlanan şifreleme gibi bir koruma mekanizması kullanabilir, uygulamanız dosyayı salt okunurdur ve bu, Dispose yöntemini çağıran ve .NET Framework atık toplayıcısı tarafından bir bilgisayar belleğinden silinebilirler.However, the value of a SecureString object is pinned in memory, may use a protection mechanism, such as encryption, provided by the underlying operating system, can be modified until your application marks it as read-only, and can be deleted from computer memory either by your application calling the Dispose method or by the .NET Framework garbage collector.

SecureString sınıfının sınırlamaları hakkında bir tartışma için bkz. ne kadar güvenli? SecureString? bölümü.For a discussion of the limitations of the SecureString class, see the How secure is SecureString? section.

Başa dönBack to top

SecureString işlemleriSecureString operations

SecureString sınıfı şunları yapmanıza izin veren üyeleri içerir:The SecureString class includes members that allow you to do the following:

SecureString nesnesi örneği oluşturmaInstantiate a SecureString object
Parametresiz oluşturucuyu çağırarak bir SecureString nesnesini örnekleyebilirsiniz.You instantiate a SecureString object by calling its parameterless constructor.

SecureString nesnesine karakterler eklemeAdd characters to a SecureString object
AppendChar veya InsertAt yöntemini çağırarak bir SecureString nesnesine tek bir karakter ekleyebilirsiniz.You can add a single character at a time to a SecureString object by calling its AppendChar or InsertAt method.

Önemli

Hassas veriler zaten sabit String sınıfının bellek kalıcılığı sonuçlara bağlı olduğundan, bir SecureString nesnesi hiçbir şekilde Stringoluşturulmamalıdır.A SecureString object should never be constructed from a String, because the sensitive data is already subject to the memory persistence consequences of the immutable String class. SecureString nesne oluşturmanın en iyi yolu, Console.ReadKey yöntemi gibi bir kerelik bir yönetilmeyen kaynaktan elde edilir.The best way to construct a SecureString object is from a character-at-a-time unmanaged source, such as the Console.ReadKey method.

SecureString nesnesinden karakterleri kaldırRemove characters from a SecureString object
SetAt yöntemini çağırarak tek bir karakteri değiştirebilir, RemoveAt yöntemini çağırarak tek bir karakteri kaldırabilir ya da Clear yöntemini çağırarak SecureString örneğindeki tüm karakterleri kaldırabilirsiniz.You can replace an individual character by calling the SetAt method, remove an individual character by calling the RemoveAt method, or remove all characters from the SecureString instance by calling the Clear method.

SecureString nesnesini salt okunurdur yapmaMake the SecureString object read-only
SecureString nesnenin temsil ettiği dizeyi tanımladıktan sonra, dizeyi salt okunurdur hale getirmek için MakeReadOnly yöntemini çağırın.Once you have defined the string that the SecureString object represents, you call its MakeReadOnly method to make the string read-only.

SecureString nesnesi hakkında bilgi alınGet information about the SecureString object
SecureString sınıfı yalnızca dize ile ilgili bilgi sağlayan iki üyeye sahiptir: dize içindeki UTF16 kodlu kod birimi sayısını gösteren Length özelliği. ve IsReadOnly, yöntemi, örneğin salt okunurdur.The SecureString class has only two members that provide information about the string: its Length property, which indicates the number of UTF16-encoded code units in the string; and the IsReadOnly, method, which indicates whether the instance is read-only.

SecureString örneğine ayrılan belleği serbest bırakmaRelease the memory allocated to the SecureString instance
SecureString IDisposable arabirimini gerçekleştirdiğinden, Dispose yöntemini çağırarak belleğini serbest bırakmaktan olursunuz.Because SecureString implements the IDisposable interface, you release its memory by calling the Dispose method.

SecureString sınıfı, bir SecureStringdeğerini denetleyen, karşılaştıran veya dönüştüren bir üyeye sahip değildir.The SecureString class has no members that inspect, compare, or convert the value of a SecureString. Bu tür üyelerin yokluğu, örneğin değerinin yanlışlıkla veya kötü amaçlı bir açığa çıkmasına karşı korunmasını sağlar.The absence of such members helps protect the value of the instance from accidental or malicious exposure. Bir SecureString nesnesinin değerini işlemek için SecureStringToBSTR yöntemi gibi System.Runtime.InteropServices.Marshal sınıfının uygun üyelerini kullanın.Use appropriate members of the System.Runtime.InteropServices.Marshal class, such as the SecureStringToBSTR method, to manipulate the value of a SecureString object.

.NET Framework sınıfı kitaplığı, genellikle aşağıdaki yollarla SecureString örnekleri kullanır:The .NET Framework Class Library commonly uses SecureString instances in the following ways:

Başa dönBack to top

SecureString ve InteropSecureString and interop

İşletim sistemi SecureStringdoğrudan desteklemediği için, dizeyi yerel bir yönteme geçirmeden önce SecureString nesnesinin değerini gereken dize türüne dönüştürmeniz gerekir.Because the operating system does not directly support SecureString, you must convert the value of the SecureString object to the required string type before passing the string to a native method. Marshal sınıfı bunu yapan beş yönteme sahiptir:The Marshal class has five methods that do this:

Bu yöntemlerin her biri, yönetilmeyen bellekte şifresiz metin dizesi oluşturur.Each of these methods creates a clear-text string in unmanaged memory. Bu, artık gerekli olmadığında, bu belleği sıfırsız ve serbest bırakma geliştiricisinin sorumluluğundadır.It is the responsibility of the developer to zero out and free that memory as soon as it is no longer needed. Dize dönüştürme ve bellek ayırma yöntemlerinin her biri, ayrılmış belleği sıfıra serbest bırakmak için karşılık gelen bir yönteme sahiptir:Each of the string conversion and memory allocation methods has a corresponding method to zero out and free the allocated memory:

Ayırma ve dönüştürme yöntemiAllocation and conversion method Sıfır ve ücretsiz YöntemZero and free method
Marshal.SecureStringToBSTR Marshal.ZeroFreeBSTR
Marshal.SecureStringToCoTaskMemAnsi Marshal.ZeroFreeCoTaskMemAnsi
Marshal.SecureStringToCoTaskMemUnicode Marshal.ZeroFreeCoTaskMemUnicode
Marshal.SecureStringToGlobalAllocAnsi Marshal.ZeroFreeGlobalAllocAnsi
Marshal.SecureStringToCoTaskMemUnicode Marshal.ZeroFreeGlobalAllocUnicode

Başa dönBack to top

SecureString ne kadar güvenlidir?How secure is SecureString?

Düzgün şekilde oluşturulduğunda, bir SecureString örneği bir Stringdaha fazla veri koruması sağlar.When created properly, a SecureString instance provides more data protection than a String. Bir zaman kaynağından bir dize oluştururken String birden çok ara bellek oluşturur, SecureString yalnızca tek bir örnek oluşturur.When creating a string from a character-at-a-time source, String creates multiple intermediate in memory, whereas SecureString creates just a single instance. String nesnelerinin çöp toplama belirleyici değildir.Garbage collection of String objects is non-deterministic. Ayrıca, bellek sabitlenmemiş olduğundan çöp toplayıcı belleği taşırken ve sıkıştırılırken String değerlerinin ek kopyalarını oluşturacak.In addition, because its memory is not pinned, the garbage collector will make additional copies of String values when moving and compacting memory. Buna karşılık, bir SecureString nesnesine ayrılan bellek sabitlenmiştir ve bu bellek Dispose yöntemi çağırarak serbest bırakılabilirler.In contrast, the memory allocated to a SecureString object is pinned, and that memory can be freed by calling the Dispose method.

Bir SecureString örneğinde depolanan veriler, bir String örneğinde depolanan verilerden daha güvenli olsa da, bir SecureString örneğinin ne kadar güvenli olduğu konusunda önemli sınırlamalar vardır.Although data stored in a SecureString instance is more secure than data stored in a String instance, there are significant limitations on how secure a SecureString instance is. Bunlar:These include:

PlatformPlatform
Windows işletim sisteminde, bir SecureString örneğinin iç karakter dizisinin içerikleri şifrelenir.On the Windows operating system, the contents of a SecureString instance's internal character array are encrypted. Ancak, eksik API 'Ler veya anahtar yönetimi sorunları nedeniyle şifreleme tüm platformlarda kullanılamaz.However, whether because of missing APIs or key management issues, encryption is not available on all platforms. Bu platform bağımlılığı nedeniyle, SecureString Windows olmayan platformda iç depolamayı şifrelemez.Because of this platform dependency, SecureString does not encrypt the internal storage on non-Windows platform. Diğer teknikler, bu platformlarda ek koruma sağlamak için kullanılır.Other techniques are used on those platforms to provide additional protection.

SüreDuration
SecureString uygulama şifrelemeden faydalanabilir olsa da, SecureString örneğine atanan düz metin çeşitli zamanlarda gösterilebilir:Even if the SecureString implementation is able to take advantage of encryption, the plain text assigned to the SecureString instance may be exposed at various times:

  • Windows işletim sistemi düzeyinde güvenli bir dize uygulama sunmadığından, .NET Framework yine de güvenli dize değerini kullanmak için düz metin gösterimine dönüştürmeniz gerekir.Because Windows doesn't offer a secure string implementation at the operating system level, the .NET Framework still has to convert the secure string value to its plain text representation in order to use it.

  • Güvenli dizenin değeri AppendChar veya RemoveAtgibi yöntemlerle değiştirildiğinde, şifresinin çözülmesi (yani düz metne dönüştürülecek), değiştirilirse ve sonra yeniden şifrelenmelidir.Whenever the value of the secure string is modified by methods such as AppendChar or RemoveAt, it must be decrypted (that is, converted back to plain text), modified, and then encrypted again.

  • Güvenli dize birlikte çalışma çağrısında kullanılıyorsa, bu, bir ANSI dizesine, Unicode dizesine veya ikili dizeye (BSTR) dönüştürülmelidir.If the secure string is used in an interop call, it must be converted to an ANSI string, a Unicode string, or a binary string (BSTR). Daha fazla bilgi için SecureString ve Interop bölümüne bakın.For more information, see the SecureString and interop section.

SecureString örneğinin değerinin açığa çıkarılan zaman aralığı, String sınıfına kıyasla yalnızca kısaltıldı.The time interval for which the SecureString instance's value is exposed is merely shortened in comparison to the String class.

Depolama ve kullanım karşılaştırmasıStorage versus usage
Daha genel olarak, SecureString sınıfı, korunması veya gizli tutulması gereken dize değerleri için bir depolama mekanizması tanımlar.More generally, the SecureString class defines a storage mechanism for string values that should be protected or kept confidential. Ancak .NET Framework dışında, kullanım mekanizması SecureStringdesteklememektedir.However, outside of the .NET Framework itself, no usage mechanism supports SecureString. Bu, güvenli dizenin, hedefi tarafından tanınabilen kullanılabilir bir biçime (genellikle düz metin biçiminde) dönüştürülmesi ve Kullanıcı alanında şifre çözme ve dönüştürme olması gerektiği anlamına gelir.This means that the secure string must be converted to a usable form (typically a clear text form) that can be recognized by its target, and that decryption and conversion must occur in user space.

Genel, hassas dize verilerinin açıklanmasını sınırladığından, SecureString String daha güvenlidir.Overall, SecureString is more secure than String because it limits the exposure of sensitive string data. Ancak, bu dizeler, ana bilgisayarda çalışan kötü amaçlı bir işlem, bir işlem dökümü veya Kullanıcı tarafından görüntülenebilen bir takas dosyası gibi ham belleğe erişimi olan herhangi bir işlem veya işleme de sunulabilir.However, those strings may still be exposed to any process or operation that has access to raw memory, such as a malicious process running on the host computer, a process dump, or a user-viewable swap file. Parolaları korumak için SecureString kullanmak yerine önerilen alternatif, işlemin dışında depolanan kimlik bilgileri için donuk bir tanıtıcı kullanmaktır.Instead of using SecureString to protect passwords, the recommended alternative is to use an opaque handle to credentials that are stored outside of the process.

Başa dönBack to top

Oluşturucular

SecureString()

SecureString sınıfının yeni bir örneğini başlatır.Initializes a new instance of the SecureString class.

SecureString(Char*, Int32)

Char nesnelerden oluşan bir alt diziden SecureString sınıfının yeni bir örneğini başlatır.Initializes a new instance of the SecureString class from a subarray of Char objects.

Bu oluşturucu, CLS uyumlu değil.This constructor is not CLS-compliant. CLS uyumlu alternatifi SecureString().The CLS-compliant alternative is SecureString().

Özellikler

Length

Geçerli güvenli dizedeki karakter sayısını alır.Gets the number of characters in the current secure string.

Yöntemler

AppendChar(Char)

Geçerli güvenli dizenin sonuna bir karakter ekler.Appends a character to the end of the current secure string.

Clear()

Geçerli güvenli dizenin değerini siler.Deletes the value of the current secure string.

Copy()

Geçerli güvenli dizenin bir kopyasını oluşturur.Creates a copy of the current secure string.

Dispose()

Geçerli SecureString nesnesi tarafından kullanılan tüm kaynakları serbest bırakır.Releases all resources used by the current SecureString object.

Equals(Object)

Belirtilen nesnenin geçerli nesneyle eşit olup olmadığını belirler.Determines whether the specified object is equal to the current object.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi olarak işlev görür.Serves as the default hash function.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.Gets the Type of the current instance.

(Devralındığı yer: Object)
InsertAt(Int32, Char)

Bu güvenli dizeye belirtilen dizin konumunda bir karakter ekler.Inserts a character in this secure string at the specified index position.

IsReadOnly()

Bu güvenli dizenin salt okunurdur işaretli olup olmadığını gösterir.Indicates whether this secure string is marked read-only.

MakeReadOnly()

Bu güvenli dizenin metin değerini salt okunurdur.Makes the text value of this secure string read-only.

MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.Creates a shallow copy of the current Object.

(Devralındığı yer: Object)
RemoveAt(Int32)

Belirtilen dizin konumundaki karakteri bu güvenli dizeden kaldırır.Removes the character at the specified index position from this secure string.

SetAt(Int32, Char)

Belirtilen dizin konumundaki mevcut karakteri başka bir karakterle değiştirir.Replaces the existing character at the specified index position with another character.

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.Returns a string that represents the current object.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.