다음을 통해 공유


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

비고

이 문서는 .NET Framework에만 적용됩니다. .NET 6 이상 버전을 포함하여 .NET의 최신 구현에는 적용되지 않습니다.

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

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

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

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

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

예를 들어 개발자가 바이트 집합의 SHA1 해시를 계산하려고 하는 경우를 가정해 보겠습니다. 네임스페이스에는 System.Security.Cryptography SHA1 알고리즘의 두 가지 구현, 즉 순수하게 관리되는 구현과 CryptoAPI를 래핑하는 구현이 포함됩니다. 개발자는 SHA1Managed 연산자를 호출하여 특정 SHA1 구현(예: )을 인스턴스화하도록 선택할 수 있습니다. 그러나 클래스가 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.Create 가 개체를 반환 MySHA1HashClass 하도록 런타임을 구성하는 방법을 보여 줍니다.

<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> 요소는 클래스를 하나의 친숙한 알고리즘 이름에 매핑합니다. 이름 특성은 System.Security.Cryptography.CryptoConfig.CreateFromName 메서드를 호출할 때 사용되는 문자열이거나 네임스페이스에서 추상 암호화 클래스 System.Security.Cryptography 의 이름일 수 있습니다. 클래스 특성의 값은 cryptoClass< 요소에 있는 특성의> 이름입니다.

비고

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

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

참고하십시오