Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Classe KeyedHashAlgorithm

Representa a classe abstrata da quais todas as implementações de hash com chave algoritmos devem derivar.

Namespace:  System.Security.Cryptography
Assembly:  mscorlib (em mscorlib.dll)
[ComVisibleAttribute(true)]
public abstract class KeyedHashAlgorithm : HashAlgorithm

O tipo KeyedHashAlgorithm expõe os membros a seguir.

  NomeDescrição
Método protegidoKeyedHashAlgorithmInitializes a new instance of the KeyedHashAlgorithm class.
Início
  NomeDescrição
Propriedade públicaCanReuseTransformObtém um valor indicando se a transformação atual pode ser reutilizada. (Herdado de HashAlgorithm.)
Propriedade públicaCanTransformMultipleBlocksQuando substituído em uma classe derivada, obtém um valor indicando se vários blocos podem ser transformados. (Herdado de HashAlgorithm.)
Propriedade públicaHashObtém o valor do código hash computado. (Herdado de HashAlgorithm.)
Propriedade públicaHashSizeObtém o tamanho em bits, o código de hash computado. (Herdado de HashAlgorithm.)
Propriedade públicaInputBlockSizeQuando substituído em uma classe derivada, obtém o tamanho do bloco de entrada. (Herdado de HashAlgorithm.)
Propriedade públicaKeyObtém ou define a chave para usar o algoritmo de hash.
Propriedade públicaOutputBlockSizeQuando substituído em uma classe derivada, obtém o tamanho do bloco de saída. (Herdado de HashAlgorithm.)
Início
  NomeDescrição
Método públicoClearLibera todos os recursos usados pela HashAlgorithm classe. (Herdado de HashAlgorithm.)
Método públicoComputeHash(Byte[])Calcula o valor de hash para a matriz de bytes especificado. (Herdado de HashAlgorithm.)
Método públicoComputeHash(Stream)Calcula o valor de hash especificado Stream objeto. (Herdado de HashAlgorithm.)
Método públicoComputeHash(Byte[], Int32, Int32)Calcula o valor de hash para a região especificada de matriz de bytes especificado. (Herdado de HashAlgorithm.)
Método públicoMembro estáticoCreate()Cria uma instância da implementação de um algoritmo de hash com chave padrão.
Método públicoMembro estáticoCreate(String)Cria uma instância da implementação de um algoritmo de hash com chave especificada.
Método públicoDispose()Libera todos os recursos utilizados pela instância atual do HashAlgorithm classe. (Herdado de HashAlgorithm.)
Método protegidoDispose(Boolean)Libera os recursos não gerenciados usados pela KeyedHashAlgorithm e, opcionalmente, libera os recursos gerenciados. (Substitui HashAlgorithm.Dispose(Boolean).)
Método públicoEquals(Object) Determina se o Object especificado é igual ao Object atual. (Herdado de Object.)
Método protegidoFinalize Permite que um objeto tente liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)
Método públicoGetHashCodeServe como uma função hash para um tipo específico. (Herdado de Object.)
Método públicoGetType Obtém o Type da instância atual. (Herdado de Object.)
Método protegidoHashCoreQuando substituído em uma classe derivada, roteia os dados gravados no objeto no algoritmo de hash para a computação do hash. (Herdado de HashAlgorithm.)
Método protegidoHashFinalQuando substituído em uma classe derivada, finaliza a computação do hash após os últimos dados são processados pelo objeto de fluxo de criptografia. (Herdado de HashAlgorithm.)
Método públicoInitializeInicializa uma implementação de HashAlgorithm classe. (Herdado de HashAlgorithm.)
Método protegidoMemberwiseCloneCria uma cópia superficial do Object atual. (Herdado de Object.)
Método públicoToStringRetorna uma string que representa o objeto atual. (Herdado de Object.)
Método públicoTransformBlockCalcula o valor de hash para a região especificada de matriz de bytes de entrada e copia a região especificada de matriz de bytes de entrada para a região especificada de matriz de bytes de saída. (Herdado de HashAlgorithm.)
Método públicoTransformFinalBlockCalcula o valor de hash para a região especificada de matriz de bytes especificado. (Herdado de HashAlgorithm.)
Início
  NomeDescrição
Campo protegidoHashSizeValueRepresenta o tamanho, em bits, o código de hash computado. (Herdado de HashAlgorithm.)
Campo protegidoHashValueRepresenta o valor do código hash computado. (Herdado de HashAlgorithm.)
Campo protegidoKeyValueA chave para usar o algoritmo de hash.
Campo protegidoStateRepresenta o estado do cálculo de hash. (Herdado de HashAlgorithm.)
Início

Hash funções mapa binárias seqüências de um comprimento arbitrário para pequenos binários seqüências de caracteres de comprimento fixo. Uma função de hash criptográfico tem a propriedade que é impraticável para localizar duas entradas distintas que hash para o mesmo valor. Pequenas alterações nos dados resultar em alterações de grandes e imprevisíveis o hash.

Um algoritmo de hash com chave é uma função de hash unidirecional, de dependentes de chave usada como um código de autenticação de mensagem. Somente alguém que conheça a chave pode verificar o hash. Algoritmos de hash com chave fornecem autenticidade sem sigilo.

Funções de hash são normalmente usadas com assinaturas digitais e a integridade de dados. O HMACSHA1 classe é um exemplo de um algoritmo de hash com chave.

O exemplo de código a seguir demonstra como para derivar a partir de KeyedHashAlgorithm classe.


using System;
using System.Security.Cryptography;

public class TestHMACMD5
{
    static private void PrintByteArray(Byte[] arr)
    {
        int i;
        Console.WriteLine("Length: " + arr.Length);
        for (i = 0; i < arr.Length; i++)
        {
            Console.Write("{0:X}", arr[i]);
            Console.Write("    ");
            if ((i + 9) % 8 == 0) Console.WriteLine();
        }
        if (i % 8 != 0) Console.WriteLine();
    }
    public static void Main()
    {
        // Create a key.
        byte[] key1 = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
        // Pass the key to the constructor of the HMACMD5 class.  
        HMACMD5 hmac1 = new HMACMD5(key1);

        // Create another key.
        byte[] key2 = System.Text.Encoding.ASCII.GetBytes("KeyString");
        // Pass the key to the constructor of the HMACMD5 class.  
        HMACMD5 hmac2 = new HMACMD5(key2);

        // Encode a string into a byte array, create a hash of the array,
        // and print the hash to the screen.
        byte[] data1 = System.Text.Encoding.ASCII.GetBytes("Hi There");
        PrintByteArray(hmac1.ComputeHash(data1));

        // Encode a string into a byte array, create a hash of the array,
        // and print the hash to the screen.
        byte[] data2 = System.Text.Encoding.ASCII.GetBytes("This data will be hashed.");
        PrintByteArray(hmac2.ComputeHash(data2));
    }
}
public class HMACMD5 : KeyedHashAlgorithm
{
    private MD5 hash1;
    private MD5 hash2;
    private bool bHashing = false;

    private byte[] rgbInner = new byte[64];
    private byte[] rgbOuter = new byte[64];

    public HMACMD5(byte[] rgbKey)
    {
        HashSizeValue = 128;
        // Create the hash algorithms.
        hash1 = MD5.Create();
        hash2 = MD5.Create();
        // Get the key.
        if (rgbKey.Length > 64)
        {
            KeyValue = hash1.ComputeHash(rgbKey);
            // No need to call Initialize; ComputeHash does it automatically.
        }
        else
        {
            KeyValue = (byte[])rgbKey.Clone();
        }
        // Compute rgbInner and rgbOuter.
        int i = 0;
        for (i = 0; i < 64; i++)
        {
            rgbInner[i] = 0x36;
            rgbOuter[i] = 0x5C;
        }
        for (i = 0; i < KeyValue.Length; i++)
        {
            rgbInner[i] ^= KeyValue[i];
            rgbOuter[i] ^= KeyValue[i];
        }
    }

    public override byte[] Key
    {
        get { return (byte[])KeyValue.Clone(); }
        set
        {
            if (bHashing)
            {
                throw new Exception("Cannot change key during hash operation");
            }
            if (value.Length > 64)
            {
                KeyValue = hash1.ComputeHash(value);
                // No need to call Initialize; ComputeHash does it automatically.
            }
            else
            {
                KeyValue = (byte[])value.Clone();
            }
            // Compute rgbInner and rgbOuter.
            int i = 0;
            for (i = 0; i < 64; i++)
            {
                rgbInner[i] = 0x36;
                rgbOuter[i] = 0x5C;
            }
            for (i = 0; i < KeyValue.Length; i++)
            {
                rgbInner[i] ^= KeyValue[i];
                rgbOuter[i] ^= KeyValue[i];
            }
        }
    }
    public override void Initialize()
    {
        hash1.Initialize();
        hash2.Initialize();
        bHashing = false;
    }
    protected override void HashCore(byte[] rgb, int ib, int cb)
    {
        if (bHashing == false)
        {
            hash1.TransformBlock(rgbInner, 0, 64, rgbInner, 0);
            bHashing = true;
        }
        hash1.TransformBlock(rgb, ib, cb, rgb, ib);
    }

    protected override byte[] HashFinal()
    {
        if (bHashing == false)
        {
            hash1.TransformBlock(rgbInner, 0, 64, rgbInner, 0);
            bHashing = true;
        }
        // Finalize the original hash.
        hash1.TransformFinalBlock(new byte[0], 0, 0);
        // Write the outer array.
        hash2.TransformBlock(rgbOuter, 0, 64, rgbOuter, 0);
        // Write the inner hash and finalize the hash.
        hash2.TransformFinalBlock(hash1.Hash, 0, hash1.Hash.Length);
        bHashing = false;
        return hash2.Hash;
    }
}


.NET Framework

Com suporte em: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 7, Windows Vista SP1 ou posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core não compatível), Windows Server 2008 R2 (Server Core não compatível com SP1 ou posterior), Windows Server 2003 SP2

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos de sistema do .NET Framework.
Quaisquer membros static (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Data

Histórico

Motivo

Março de 2011

Substituído o exemplo.

Aprimoramento de informações.

Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
© 2013 Microsoft. Todos os direitos reservados.