Partilhar via


Mapeamento de nomes de algoritmo para classes de criptografia

Existem quatro maneiras de um desenvolvedor pode criar um objeto de criptografia usando a Windows Software Development Kit (SDK):

  • Criar um objeto usando o nova operador.

  • Criar um objeto que implementa um algoritmo de criptografia específica chamando o criar método na classe abstrata desse algoritmo.

  • Criar um objeto que implementa um algoritmo de criptografia específica chamando o System.Security.Cryptography.CryptoConfig.CreateFromName método.

  • Criar um objeto que implementa uma classe de algoritmos criptográficos (como uma codificação de bloco simétrica) chamando o criar método na classe abstrata para aquele tipo de algoritmo (como SymmetricAlgorithm).

Por exemplo, suponha que um desenvolvedor deseja calcular o hash SHA1 de um conjunto de bytes. O System.Security.Cryptography namespace contém duas implementações o algoritmo SHA1, uma implementação puramente gerenciada e outro que encapsula o CryptoAPI. O desenvolvedor pode optar por criar uma instância de uma implementação específica do SHA1 (como o a classe de SHA1Managed) chamando o nova operador. No entanto, se não importa qual classe common language runtime carrega, contanto que a classe implementa o algoritmo de hash SHA1, o desenvolvedor pode criar um objeto chamando o System.Security.Cryptography.SHA1.Create método. Este método chama System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), que deve retornar uma implementação do algoritmo de hash SHA1.

O desenvolvedor também pode chamar System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") porque, por padrão, a configuração de criptografia inclui nomes curtos para os algoritmos fornecidos na.NET Framework.

Se não importa qual algoritmo de hash é usado, o desenvolvedor pode chamar o System.Security.Cryptography.HashAlgorithm.Create método, que retorna um objeto que implementa uma transformação de hash.

Mapeamento de nomes do algoritmo em arquivos de configuração

Por padrão, o runtime retorna um System.Security.Cryptography.SHA1CryptoServiceProvider classe o objeto para todos os quatro cenários. No entanto, um administrador de máquina pode alterar o tipo de objeto que os métodos nos últimos dois cenários retornam. Para fazer isso, você deve mapear um nome amigável algoritmo para a classe que você deseja usar no arquivo de configuração de máquina (Machine. config).

O exemplo a seguir mostra como configurar o tempo de execução para que System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1"), e System.Security.Cryptography.HashAlgorithm.Create retornar uma MySHA1HashClass objeto.

<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>

Você pode especificar o nome do atributo na <cryptoClass> elemento (nomes de exemplo anterior o atributo MySHA1Hash). O valor do atributo na <cryptoClass> elemento é uma seqüência de caracteres que o common language runtime usa para localizar a classe. Você pode usar qualquer seqüência de caracteres que atenda aos requisitos especificados em Especificando nomes de tipo totalmente qualificado.

Muitos nomes de algoritmo podem mapear para a mesma classe. O <nameEntry> elemento mapeia uma classe para um nome do algoritmo amigável. O nome atributo pode ser uma seqüência que é usada ao chamar o System.Security.Cryptography.CryptoConfig.CreateFromName método ou o nome de uma classe abstrata de criptografia na System.Security.Cryptography namespace. O valor de classe atributo é o nome do atributo na <cryptoClass> elemento.

Observação

Você pode obter um algoritmo SHA1, chamando o System.Security.Cryptography.SHA1.Create ou Security.CryptoConfig.CreateFromName("SHA1") método.Cada método garante apenas que ele retorna um objeto que implementa o algoritmo SHA1.Não é necessário mapear cada nome amigável de um algoritmo à mesma classe no arquivo de configuração.

Para obter uma lista de nomes padrão e as classes que podem ser mapeados para, consulte CryptoConfig classe.

Consulte também

Conceitos

Serviços de criptografia

Outros recursos

Configurando Classes de criptografia