이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

SecureString 클래스

 

게시 날짜: 2016년 11월

더 이상 필요 없게 되면 컴퓨터 메모리에서 삭제되는 텍스트처럼 기밀을 유지해야 하는 텍스트를 나타냅니다. 이 클래스는 상속될 수 없습니다.

네임스페이스:   System.Security
어셈블리:  mscorlib(mscorlib.dll에 있음)

System.Object
  System.Security.SecureString

public sealed class SecureString : IDisposable

이름설명
System_CAPS_pubmethodSecureString()

SecureString 클래스의 새 인스턴스를 초기화합니다.

System_CAPS_pubmethodSecureString(Char*, Int32)

이 API는 제품 인프라를 지원하며 코드에서 직접 사용할 수 없습니다. System.Char 개체의 하위 배열에서 SecureString 클래스의 새 인스턴스를 초기화합니다.

이 생성자는 CLS 규격이 아닙니다. CLS 규격 대체 항목은 SecureString.SecureString()입니다.

이름설명
System_CAPS_pubpropertyLength

현재 보안 문자열의 문자 수를 가져옵니다.

이름설명
System_CAPS_pubmethodAppendChar(Char)

현재 보안 문자열의 끝에 문자를 추가합니다.

System_CAPS_pubmethodClear()

현재 보안 문자열의 값을 삭제합니다.

System_CAPS_pubmethodCopy()

현재 보안 문자열의 복사본을 만듭니다.

System_CAPS_pubmethodDispose()

현재 SecureString 개체에서 사용하는 모든 리소스를 해제합니다.

System_CAPS_pubmethodEquals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetHashCode()

기본 해시 함수로 작동합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetType()

현재 인스턴스의 Type을 가져옵니다.(Object에서 상속됨)

System_CAPS_pubmethodInsertAt(Int32, Char)

이 보안 문자열의 지정한 인덱스 위치에 문자를 삽입합니다.

System_CAPS_pubmethodIsReadOnly()

이 보안 문자열이 읽기 전용으로 표시되었는지를 나타냅니다.

System_CAPS_pubmethodMakeReadOnly()

이 보안 문자열의 텍스트 값을 읽기 전용으로 만듭니다.

System_CAPS_pubmethodRemoveAt(Int32)

이 보안 문자열에서 지정한 인덱스 위치의 문자를 제거합니다.

System_CAPS_pubmethodSetAt(Int32, Char)

지정한 인덱스 위치의 기존 문자를 다른 문자로 바꿉니다.

System_CAPS_pubmethodToString()

현재 개체를 나타내는 문자열을 반환합니다.(Object에서 상속됨)

SecureString보안 수단을 제공 하는 문자열 형식이입니다. 일반 텍스트로 프로세스 메모리에 잠재적으로 중요 한 문자열을 저장 하지 않도록 하려고 합니다. 그러나 (자세한 내용은는 SecureString은 얼마나 안전? 섹션.) 인스턴스 값 SecureString 또는 값을 수정할 인스턴스를 초기화 하는 경우에 기본 플랫폼에서 지원 되는 메커니즘을 사용 하 여 자동으로 보호 합니다. 응용 프로그램 인스턴스를 변경할 수 없는 렌더링할 수 및 호출 하 여 더 이상 수정할 수는 MakeReadOnly 메서드.

최대 길이 SecureString 인스턴스는 65, 536 자입니다.

System_CAPS_important중요

이 형식이 구현 하는 IDisposable 인터페이스입니다. 형식의 인스턴스를 사용 하 여 마쳤으면는 삭제 해야의 직접 또는 간접적으로 합니다. 직접 형식의 dispose를 호출 해당 Dispose 에서 메서드는 try/catch 블록입니다. 작업을 삭제할 하지 직접,를 사용 하 여 언어 구문와 같은 using (C#에서) 또는 Using (Visual Basic)에서는 합니다. 자세한 내용은의 "를 사용 하는 개체는 구현 IDisposable" 섹션을 참조 하십시오.는 IDisposable 인터페이스 항목입니다.

SecureString 클래스와 해당 멤버 COM에 표시 되지 않습니다. 자세한 내용은 ComVisibleAttribute을 참조하십시오.

섹션 내용

Vs는 문자열입니다. SecureString
SecureString 작업
SecureString 및 interop
SecureString은 얼마나 안전?

인스턴스는 System.String 클래스는 모두 변경할 수 없는 더 이상 필요 없는 프로그래밍 방식으로 예약 될 가비지 수집에 대 한; 즉, 인스턴스는 읽기 전용 카탈로그 항목이 생성 된 후 컴퓨터 메모리에서 인스턴스 삭제할 수는 경우 예측할 수 없는 합니다. 때문에 System.String 인스턴스를 변경할 수 없는 경우, 기존 인스턴스를 수정 하는 작업은 실제로 조작 하기 위한 것의 복사본을 만듭니다. 따라서 경우는 String 암호, 신용 카드 번호 또는 개인 데이터와 같은 중요 한 정보를 포함 하는 개체, 응용 프로그램 컴퓨터 메모리에서 데이터를 삭제할 수 없으므로 사용 된 후 정보 누설 될 위험이 있습니다.

A SecureString 개체는 비슷합니다는 String 텍스트 값이 있다는 점에서 개체입니다. 그러나 값은 SecureString 메모리에 고정 개체, 응용 프로그램이 읽기 전용으로 표시 될 때까지 수정할 수는 기본 운영 체제에서 제공 하는 암호화와 같은 보호 메커니즘을 사용할 수 있습니다 컴퓨터 메모리에서 삭제 될 응용 프로그램 호출 하 여 하나는 Dispose 메서드 또는.NET Framework 가비지 수집기에 의해 합니다.

제한 사항에 대 한 내용은 SecureString 클래스를 참조 하십시오.는 보안은 SecureString? 섹션.

맨 위로 이동

SecureString 클래스는 다음 작업을 수행할 수 있는 멤버를 포함 합니다.

인스턴스화하는 SecureString 개체

인스턴스화하는 SecureString 해당 매개 변수가 없는 생성자를 호출 하 여 개체입니다.

추가 문자는 SecureString 개체

한 번에 단일 문자를 추가할 수 있습니다는 SecureString 개체를 호출 하 여 해당 AppendChar 또는 InsertAt 메서드.

System_CAPS_important중요

A SecureString 개체에서 생성 되지 해야는 String중요 한 데이터를 변경할 수 없는 작업의 메모리 지 속성 결과 따라 이미 이므로, String 클래스입니다. 생성 하는 가장 좋은 방법은 SecureString 과 같은 문자 런타임 관리 되지 않는 소스에서 개체를는 Console.ReadKey 메서드.

문자를 제거는 SecureString 개체

호출 하 여 개별 문자를 바꿀 수 있습니다는 SetAt 메서드를 호출 하 여 개별 문자를 제거는 RemoveAt 메서드나에서 모든 문자의 제거는 SecureString 호출 하 여 인스턴스는 Clear 메서드.

확인 된 SecureString 개체 읽기 전용

문자열을 정의 하는 SecureString 개체가 나타내는 호출 합니다. 해당 MakeReadOnly 읽기 전용 문자열을 만드는 메서드와 알림이 합니다.

에 대 한 정보를 가져오기는 SecureString 개체

SecureString 클래스에는 문자열에 대 한 정보를 제공 하는 두 명의 멤버: 해당 Length ; 문자열에 u t f 16으로 인코딩된 코드 단위 수를 나타내는 속성 및 IsReadOnly, 메서드 인스턴스가 읽기 전용인 지 여부를 나타냅니다.

에 할당 된 메모리를 해제는 SecureString 인스턴스

때문에 SecureString 구현 하는 IDisposable 인터페이스를 호출 하 여 해당 메모리를 해제는 Dispose 메서드.

SecureString 클래스에 검사, 비교, 또는 값으로 변환 하는 멤버가 없는 SecureString합니다. 이러한 멤버가 없으므로 실수로 또는 악의적으로 노출 로부터 인스턴스 값을 보호할 수 있습니다. 적절 한 멤버를 사용 하 여는 System.Runtime.InteropServices.Marshal 클래스 같은 SecureStringToBSTR 메서드 값을 조작 하는 SecureString 개체입니다.

자주 사용 되는.NET Framework 클래스 라이브러리 SecureString 다음과 같은 방법으로 인스턴스:

맨 위로 이동

운영 체제에서 직접 지원 하지 않으므로 SecureString를 값으로 변환 해야 합니다는 SecureString 개체에 네이티브 메서드에서 문자열을 전달 하기 전에 필수 문자열 형식입니다. Marshal 클래스에이 작업을 수행 하는 5 개의 메서드가 있습니다.

이러한 각 방법의 관리 되지 않는 메모리의 일반 텍스트 문자열을 만듭니다. 것은을 비우고 더 이상 필요 하는 즉시 해당 메모리를 확보 하는 개발자의 책임입니다. 문자열 변환 및 메모리 할당 메서드는 각각 해당 하는 메서드를 비우고 할당된 된 메모리:

할당 및 변환 메서드

0과 free 메서드

Marshal.SecureStringToBSTR

Marshal.ZeroFreeBSTR

Marshal.SecureStringToCoTaskMemAnsi

Marshal.ZeroFreeCoTaskMemAnsi

Marshal.SecureStringToCoTaskMemUnicode

Marshal.ZeroFreeCoTaskMemUnicode

Marshal.SecureStringToGlobalAllocAnsi

Marshal.ZeroFreeGlobalAllocAnsi

Marshal.SecureStringToCoTaskMemUnicode

Marshal.ZeroFreeGlobalAllocUnicode

맨 위로 이동

적절 하 게 만들 때 한 SecureString 보다 더 많은 데이터 보호를 제공 하는 인스턴스는 String합니다. 문자 런타임 원본에서 문자열을 만들 때 String 여러 중간 메모리에 만듭니다. 반면 SecureString 바로 단일 인스턴스를 만듭니다. 가비지 수집의 String 개체 명확 하지 않습니다. 또한 메모리 고정 되지 않으므로 때문에 가비지 수집기 추가의 복사본을 만드는 String 값 메모리를 압축 하 고 이동 합니다. 반면에 할당 된 메모리는 SecureString 개체를 고정 하 고 호출 하 여 해당 메모리를 해제할 수는 Dispose 메서드.

데이터에 저장 되지만 SecureString 인스턴스가에 저장 된 데이터 보다 더 안전는 String 인스턴스를 보안에 중요 한 제한 사항이 SecureString 인스턴스가 있습니다. 여기에는 다음이 포함됩니다.

플랫폼

Windows 운영 체제의 내용에는 SecureString 인스턴스의 내부 문자 배열을 암호화 됩니다. 그러나 누락 된 Api 또는 키 관리 문제 인해 여부 암호화가 모든 플랫폼에서 사용할 수 없습니다. 이 인해 SecureString .NET Core 아니라 데스크톱 (Windows만 해당)에 사용할 수 있습니다.

기간

경우에는 SecureString 구현 암호화 기능을 활용할 수에 할당 된 일반 텍스트는 SecureString 인스턴스는 다양 한 시간에 노출 될 수 있습니다.

  • Windows 운영 체제 수준에서 보안 문자열 구현을 제공 하지 않으면.NET Framework 여전히 하기 때문에 보안 문자열 값을 사용 하려면 일반 텍스트 표현으로 변환 합니다.

  • 보안 문자열의 값 수정 될 때마다 메서드에 의해와 같은 AppendChar 또는 RemoveAt를 해독 해야 합니다 (즉, 변환 된 뒤로를 일반 텍스트로), 수정, 한 다음 다시 암호화 합니다.

  • Interop 호출에 보안 문자열을 사용 하는 경우 ANSI 문자열, 유니코드 문자열 또는 이진 문자열 (BSTR)을 변환 합니다. 자세한 내용은 SecureString 및 interop 섹션을 참조하세요.

시간 간격을는 SecureString 인스턴스의 값이 노출 비해 줄어듭니다 단순히는 String 클래스입니다.

사용 및 저장소

보다 일반적으로 SecureString 클래스 보호 되거나 기밀로 유지 해야 하는 문자열 값에 대 한 저장소 메커니즘을 정의 합니다. 그러나 외부.NET Framework 자체에서 사용 현황 메커니즘이 지원 SecureString합니다. 즉, 보안 문자열을 해당 대상에서 인식할 수 있는 가능한 형식 (일반적으로 일반 텍스트 형식)으로 변환 해야 하 고 암호 해독 및 변환 사용자 공간에서 수행 되어야 합니다.

전반적으로 SecureString 보다 더 안전 String 중요 한 문자열 데이터의 노출을 제한 하므로 합니다. 그러나 이러한 문자열 프로세스 또는 호스트 컴퓨터, 프로세스 덤프 또는 사용자가 볼 수 있는 스왑 파일에서 실행 되는 악성 프로세스 등의 원시 메모리에 액세스할 수 있는 작업에 노출 될 수 있습니다. 사용 하는 대신 SecureString 암호를 보호 하려면 메서드 대신 사용 하는 것을 프로세스 외부에 저장 된 자격 증명으로 불투명 핸들입니다.

맨 위로 이동

다음 예제에서는 사용 하는 방법을 SecureString 새로운 프로세스를 시작 하는 자격 증명으로 사용 하기 위해 사용자의 암호를 보안 합니다.

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
2.0 이후 사용 가능

이 형식의 모든 public static(Visual Basic의 공유 Visual Basic의 경우) 멤버는 스레드로부터 안전합니다. 인스턴스 멤버는 스레드로부터의 안전이 보장되지 않습니다.

맨 위로 이동
표시: