알고리즘 이름을 암호화 클래스에 매핑

개발자가 Windows SDK를 사용하여 암호화 개체를 만들 수 있는 네 가지 방법이 있습니다.

  • new 연산자를 사용하여 개체를 만듭니다.

  • 해당 알고리즘에 대한 추상 클래스에서 Create 메서드를 호출하여 특정 암호화 알고리즘을 구현하는 개체를 만듭니다.

  • CryptoConfig.CreateFromName 메서드를 호출하여 특정 암호화 알고리즘을 구현하는 개체를 만듭니다.

  • 해당 알고리즘 유형(예: SymmetricAlgorithm)에 대한 추상 클래스에서 Create 메서드를 호출하여 암호화 알고리즘 클래스(예: 대칭 블록 암호화)를 구현하는 개체를 만듭니다.

예를 들어 개발자가 바이트 세트의 SHA1 해시를 계산하려고 하는 경우를 가정해 보겠습니다. System.Security.Cryptography 네임스페이스에는 SHA1 알고리즘의 두 가지 구현, 즉 순수하게 관리되는 구현과 CryptoAPI를 래핑하는 구현이 포함되어 있습니다. 개발자는 new 연산자를 호출하여 특정 SHA1 구현(예: SHA1Managed)을 인스턴스화하도록 선택할 수 있습니다. 그러나 클래스가 SHA1 해시 알고리즘을 구현하는 한 공용 언어 런타임이 로드하는 클래스가 중요하지 않은 경우 개발자는 SHA1.Create 메서드를 호출하여 개체를 만들 수 있습니다. 이 메서드는 SHA1 해시 알고리즘의 구현을 반환해야 하는 System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1")을 호출합니다.

기본적으로 암호화 구성에는 .NET Framework에서 제공된 알고리즘에 대한 짧은 이름이 포함되어 있기 때문에 개발자는 System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1")을 호출할 수도 있습니다.

사용되는 해시 알고리즘이 중요하지 않은 경우 개발자는 해싱 변환을 구현하는 개체를 반환하는 HashAlgorithm.Create 메서드를 호출할 수 있습니다.

구성 파일에서 알고리즘 이름 매핑

기본적으로 런타임은 모든 네 가지 시나리오에 대해 SHA1CryptoServiceProvider 개체를 반환합니다. 그러나 컴퓨터 관리자는 마지막 두 시나리오의 메서드가 반환하는 개체의 형식을 변경할 수 있습니다. 이렇게 하려면 알고리즘 식별 이름을 컴퓨터 구성 파일(Machine.config)에서 사용하려는 클래스에 매핑해야 합니다.

다음 예제에서는 System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1")System.Security.Cryptography.HashAlgorithm.CreateMySHA1HashClass 개체를 반환하도록 런타임을 구성하는 방법을 보여 줍니다.

<configuration>  
   <!-- Other configuration settings. -->  
   <mscorlib>  
      <cryptographySettings>  
         <cryptoNameMapping>  
            <cryptoClasses>  
               <cryptoClass MySHA1Hash="MySHA1HashClass, MyAssembly  
                  Culture='en', PublicKeyToken=a5d015c7d5a0b012,  
                  Version=1.0.0.0"/>  
            </cryptoClasses>  
            <nameEntry name="SHA1" class="MySHA1Hash"/>  
            <nameEntry name="System.Security.Cryptography.SHA1"  
                       class="MySHA1Hash"/>  
            <nameEntry name="System.Security.Cryptography.HashAlgorithm"  
                       class="MySHA1Hash"/>  
         </cryptoNameMapping>  
      </cryptographySettings>  
   </mscorlib>  
</configuration>  

특성의 이름을 <cryptoClass> 요소에 지정할 수 있습니다. 앞의 예제에서는 특성을 MySHA1Hash라고 명명했습니다. <cryptoClass> 요소의 특성 값은 공용 언어 런타임에서 클래스를 찾기 위해 사용하는 문자열입니다. 정규화된 형식 이름 지정에 지정된 요구 사항을 충족하는 문자열을 사용할 수 있습니다.

많은 알고리즘 이름이 동일한 클래스에 매핑될 수 있습니다. <nameEntry> 요소는 클래스에 한 개의 알고리즘 식별 이름을 매핑합니다. name 특성은 System.Security.Cryptography.CryptoConfig.CreateFromName 메서드를 호출할 때 사용되는 문자열이거나 System.Security.Cryptography 네임스페이스에서 추상 암호화 클래스의 이름일 수 있습니다. class 특성의 값은 <cryptoClass> 요소의 특성 이름입니다.

참고 항목

SHA1.Create 또는 Security.CryptoConfig.CreateFromName("SHA1") 메서드를 호출하여 SHA1 알고리즘을 가져올 수 있습니다. 각 메서드는 SHA1 알고리즘을 구현하는 개체를 반환한다는 것만 보장합니다. 알고리즘의 각 식별 이름을 구성 파일의 동일한 클래스에 매핑할 필요가 없습니다.

기본 이름 및 매핑되는 클래스 목록은 CryptoConfig를 참조하세요.

참고 항목