Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase KeyedHashAlgorithm

 

Publicado: octubre de 2016

Representa la clase abstracta de la que deben derivarse todas las implementaciones de algoritmos hash en clave.

Espacio de nombres:   System.Security.Cryptography
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.Security.Cryptography.HashAlgorithm
    System.Security.Cryptography.KeyedHashAlgorithm
      System.Security.Cryptography.HMAC
      System.Security.Cryptography.MACTripleDES

[ComVisibleAttribute(true)]
public abstract class KeyedHashAlgorithm : HashAlgorithm

NombreDescripción
System_CAPS_protmethodKeyedHashAlgorithm()

Inicializa una nueva instancia de la clase KeyedHashAlgorithm.

NombreDescripción
System_CAPS_pubpropertyCanReuseTransform

Obtiene un valor que indica si la transformación actual puede volver a usarse.(Heredado de HashAlgorithm).

System_CAPS_pubpropertyCanTransformMultipleBlocks

Cuando se invalida en una clase derivada, obtiene un valor que indica si se pueden transformar varios bloques.(Heredado de HashAlgorithm).

System_CAPS_pubpropertyHash

Obtiene el valor del código hash calculado.(Heredado de HashAlgorithm).

System_CAPS_pubpropertyHashSize

Obtiene el tamaño en bits del código hash calculado.(Heredado de HashAlgorithm).

System_CAPS_pubpropertyInputBlockSize

Cuando se invalida en una clase derivada, obtiene el tamaño del bloque de entrada.(Heredado de HashAlgorithm).

System_CAPS_pubpropertyKey

Obtiene o establece la clave que se va a usar en el algoritmo hash.

System_CAPS_pubpropertyOutputBlockSize

Cuando se invalida en una clase derivada, obtiene el tamaño del bloque de salida.(Heredado de HashAlgorithm).

NombreDescripción
System_CAPS_pubmethodClear()

Libera todos los recursos que utiliza la clase HashAlgorithm.(Heredado de HashAlgorithm).

System_CAPS_pubmethodComputeHash(Byte[])

Calcula el valor hash para la matriz de bytes especificada.(Heredado de HashAlgorithm).

System_CAPS_pubmethodComputeHash(Byte[], Int32, Int32)

Calcula el valor hash para la región especificada de la matriz de bytes indicada.(Heredado de HashAlgorithm).

System_CAPS_pubmethodComputeHash(Stream)

Calcula el valor hash del objeto Stream especificado.(Heredado de HashAlgorithm).

System_CAPS_pubmethodSystem_CAPS_staticCreate()

Crea una instancia de la implementación predeterminada de un algoritmo hash en clave.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String)

Crea una instancia de la implementación especificada de un algoritmo hash en clave.

System_CAPS_pubmethodDispose()

Libera todos los recursos usados por la instancia actual de la clase HashAlgorithm.(Heredado de HashAlgorithm).

System_CAPS_protmethodDispose(Boolean)

Libera los recursos no administrados que usa KeyedHashAlgorithm y libera los recursos administrados de forma opcional.(Invalida HashAlgorithm.Dispose(Boolean)).

System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_protmethodHashCore(Byte[], Int32, Int32)

Cuando se invalida en una clase derivada, enruta los datos escritos en el objeto al algoritmo hash para el cálculo del valor hash.(Heredado de HashAlgorithm).

System_CAPS_protmethodHashFinal()

Cuando se invalida en una clase derivada, finaliza el cálculo hash una vez que el objeto de secuencia criptográfico termina de procesar los últimos datos.(Heredado de HashAlgorithm).

System_CAPS_pubmethodInitialize()

Inicializa la implementación de la clase HashAlgorithm.(Heredado de HashAlgorithm).

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

System_CAPS_pubmethodTransformBlock(Byte[], Int32, Int32, Byte[], Int32)

Calcula el valor hash para la región especificada de la matriz de bytes de entrada y copia la región especificada de la matriz de bytes de entrada resultante en la región indicada de la matriz de bytes de salida.(Heredado de HashAlgorithm).

System_CAPS_pubmethodTransformFinalBlock(Byte[], Int32, Int32)

Calcula el valor hash para la región especificada de la matriz de bytes indicada.(Heredado de HashAlgorithm).

NombreDescripción
System_CAPS_protfieldHashSizeValue

Representa el tamaño en bits del código hash calculado.(Heredado de HashAlgorithm).

System_CAPS_protfieldHashValue

Representa el valor del código hash calculado.(Heredado de HashAlgorithm).

System_CAPS_protfieldKeyValue

Clave que se va a usar en el algoritmo hash.

System_CAPS_protfieldState

Representa el estado del cálculo del valor hash.(Heredado de HashAlgorithm).

Hash functions map binary strings of an arbitrary length to small binary strings of a fixed length. A cryptographic hash function has the property that it is computationally infeasible to find two distinct inputs that hash to the same value. Small changes to the data result in large, unpredictable changes in the hash.

A keyed hash algorithm is a key-dependent, one-way hash function used as a message authentication code. Only someone who knows the key can verify the hash. Keyed hash algorithms provide authenticity without secrecy.

Hash functions are commonly used with digital signatures and for data integrity. The T:System.Security.Cryptography.HMACSHA1 class is an example of a keyed hash algorithm.

The following code example demonstrates how to derive from the T:System.Security.Cryptography.KeyedHashAlgorithm class.

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
Disponible desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: