HMACSHA512 Klas

Definitie

Berekent een HMAC (Hash-based Message Authentication Code) met behulp van de SHA512 hash-functie.

public ref class HMACSHA512 : System::Security::Cryptography::HMAC
[System.Runtime.InteropServices.ComVisible(true)]
public class HMACSHA512 : System.Security.Cryptography.HMAC
public class HMACSHA512 : System.Security.Cryptography.HMAC
[<System.Runtime.InteropServices.ComVisible(true)>]
type HMACSHA512 = class
    inherit HMAC
type HMACSHA512 = class
    inherit HMAC
Public Class HMACSHA512
Inherits HMAC
Overname
Kenmerken

Voorbeelden

In het volgende voorbeeld ziet u hoe u een bestand ondertekent met behulp van het HMACSHA512 object en hoe u het bestand controleert.

using System;
using System.IO;
using System.Security.Cryptography;

public class HMACSHA512example
{

    public static void Main(string[] Fileargs)
    {
        string dataFile;
        string signedFile;
        //If no file names are specified, create them.
        if (Fileargs.Length < 2)
        {
            dataFile = @"text.txt";
            signedFile = "signedFile.enc";

            if (!File.Exists(dataFile))
            {
                // Create a file to write to.
                using (StreamWriter sw = File.CreateText(dataFile))
                {
                    sw.WriteLine("Here is a message to sign");
                }
            }
        }
        else
        {
            dataFile = Fileargs[0];
            signedFile = Fileargs[1];
        }
        try
        {
            // Create a random key using a random number generator. This would be the
            //  secret key shared by sender and receiver.
            byte[] secretkey = new Byte[64];

            using (RandomNumberGenerator rng = RandomNumberGenerator.Create())
            {
                // The array is now filled with cryptographically strong random bytes.
                rng.GetBytes(secretkey);

                // Use the secret key to sign the message file.
                SignFile(secretkey, dataFile, signedFile);

                // Verify the signed file
                VerifyFile(secretkey, signedFile);
            }
        }
        catch (IOException e)
        {
            Console.WriteLine("Error: File not found", e);
        }
    }  //end main
    // Computes a keyed hash for a source file and creates a target file with the keyed hash
    // prepended to the contents of the source file.
    public static void SignFile(byte[] key, String sourceFile, String destFile)
    {
        // Initialize the keyed hash object.
        using (HMACSHA512 hmac = new HMACSHA512(key))
        {
            using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
            {
                using (FileStream outStream = new FileStream(destFile, FileMode.Create))
                {
                    // Compute the hash of the input file.
                    byte[] hashValue = hmac.ComputeHash(inStream);
                    // Reset inStream to the beginning of the file.
                    inStream.Position = 0;
                    // Write the computed hash value to the output file.
                    outStream.Write(hashValue, 0, hashValue.Length);
                    // Copy the contents of the sourceFile to the destFile.
                    int bytesRead;
                    // read 1K at a time
                    byte[] buffer = new byte[1024];
                    do
                    {
                        // Read from the wrapping CryptoStream.
                        bytesRead = inStream.Read(buffer, 0, 1024);
                        outStream.Write(buffer, 0, bytesRead);
                    } while (bytesRead > 0);
                }
            }
        }
        return;
    } // end SignFile

    // Compares the key in the source file with a new key created for the data portion of the file. If the keys
    // compare the data has not been tampered with.
    public static bool VerifyFile(byte[] key, String sourceFile)
    {
        bool err = false;
        // Initialize the keyed hash object.
        using (HMACSHA512 hmac = new HMACSHA512(key))
        {
            // Create an array to hold the keyed hash value read from the file.
            byte[] storedHash = new byte[hmac.HashSize / 8];
            // Create a FileStream for the source file.
            using (FileStream inStream = new FileStream(sourceFile, FileMode.Open))
            {
                // Read in the storedHash.
                inStream.Read(storedHash, 0, storedHash.Length);
                // Compute the hash of the remaining contents of the file.
                // The stream is properly positioned at the beginning of the content,
                // immediately after the stored hash value.
                byte[] computedHash = hmac.ComputeHash(inStream);
                // compare the computed hash with the stored value

                for (int i = 0; i < storedHash.Length; i++)
                {
                    if (computedHash[i] != storedHash[i])
                    {
                        err = true;
                    }
                }
            }
        }
        if (err)
        {
            Console.WriteLine("Hash values differ! Signed file has been tampered with!");
            return false;
        }
        else
        {
            Console.WriteLine("Hash values agree -- no tampering occurred.");
            return true;
        }
    } //end VerifyFile
} //end class
Imports System.IO
Imports System.Security.Cryptography

Public Class HMACSHA5126example

    Public Shared Sub Main(ByVal Fileargs() As String)
        Dim dataFile As String
        Dim signedFile As String
        'If no file names are specified, create them.
        If Fileargs.Length < 2 Then
            dataFile = "text.txt"
            signedFile = "signedFile.enc"

            If Not File.Exists(dataFile) Then
                ' Create a file to write to.
                Using sw As StreamWriter = File.CreateText(dataFile)
                    sw.WriteLine("Here is a message to sign")
                End Using
            End If

        Else
            dataFile = Fileargs(0)
            signedFile = Fileargs(1)
        End If
        Try
            ' Create a random key using a random number generator. This would be the
            '  secret key shared by sender and receiver.
            Dim secretkey() As Byte = New [Byte](63) {}

            Using rng As RandomNumberGenerator = RandomNumberGenerator.Create()
                ' The array is now filled with cryptographically strong random bytes.
                rng.GetBytes(secretkey)

                ' Use the secret key to encode the message file.
                SignFile(secretkey, dataFile, signedFile)

                ' Take the encoded file and decode
                VerifyFile(secretkey, signedFile)
            End Using
        Catch e As IOException
            Console.WriteLine("Error: File not found", e)
        End Try

    End Sub

    ' Computes a keyed hash for a source file and creates a target file with the keyed hash
    ' prepended to the contents of the source file. 
    Public Shared Sub SignFile(ByVal key() As Byte, ByVal sourceFile As String, ByVal destFile As String)
        ' Initialize the keyed hash object.
        Using myhmac As New HMACSHA512(key)
            Using inStream As New FileStream(sourceFile, FileMode.Open)
                Using outStream As New FileStream(destFile, FileMode.Create)
                    ' Compute the hash of the input file.
                    Dim hashValue As Byte() = myhmac.ComputeHash(inStream)
                    ' Reset inStream to the beginning of the file.
                    inStream.Position = 0
                    ' Write the computed hash value to the output file.
                    outStream.Write(hashValue, 0, hashValue.Length)
                    ' Copy the contents of the sourceFile to the destFile.
                    Dim bytesRead As Integer
                    ' read 1K at a time
                    Dim buffer(1023) As Byte
                    Do
                        ' Read from the wrapping CryptoStream.
                        bytesRead = inStream.Read(buffer, 0, 1024)
                        outStream.Write(buffer, 0, bytesRead)
                    Loop While bytesRead > 0
                End Using
            End Using
        End Using
        Return

    End Sub
    ' end SignFile

    ' Compares the key in the source file with a new key created for the data portion of the file. If the keys 
    ' compare the data has not been tampered with.
    Public Shared Function VerifyFile(ByVal key() As Byte, ByVal sourceFile As String) As Boolean
        Dim err As Boolean = False
        ' Initialize the keyed hash object. 
        Using hmac As New HMACSHA512(key)
            ' Create an array to hold the keyed hash value read from the file.
            Dim storedHash(hmac.HashSize / 8 - 1) As Byte
            ' Create a FileStream for the source file.
            Using inStream As New FileStream(sourceFile, FileMode.Open)
                ' Read in the storedHash.
                inStream.Read(storedHash, 0, storedHash.Length - 1)
                ' Compute the hash of the remaining contents of the file.
                ' The stream is properly positioned at the beginning of the content, 
                ' immediately after the stored hash value.
                Dim computedHash As Byte() = hmac.ComputeHash(inStream)
                ' compare the computed hash with the stored value
                Dim i As Integer
                For i = 0 To storedHash.Length - 2
                    If computedHash(i) <> storedHash(i) Then
                        err = True
                    End If
                Next i
            End Using
        End Using
        If err Then
            Console.WriteLine("Hash values differ! Signed file has been tampered with!")
            Return False
        Else
            Console.WriteLine("Hash values agree -- no tampering occurred.")
            Return True
        End If

    End Function 'VerifyFile 
End Class
'end class

Opmerkingen

HMACSHA512 is een type sleutel-hash-algoritme dat is samengesteld uit de HASH-functie SHA-512 en wordt gebruikt als HMAC (Hash-based Message Authentication Code). Het HMAC-proces combineert een geheime sleutel met de berichtgegevens en hashes het resultaat. De hashwaarde wordt opnieuw gemengd met de geheime sleutel en vervolgens een tweede keer gehasht. De uitvoer-hash is 512 bits lang.

Een HMAC kan worden gebruikt om te bepalen of een bericht dat via een niet-beveiligd kanaal is verzonden, is gemanipuleerd, mits de afzender en ontvanger een geheime sleutel delen. De afzender berekent de hashwaarde voor de oorspronkelijke gegevens en verzendt zowel de oorspronkelijke gegevens als de hashwaarde als één bericht. De ontvanger berekent de hashwaarde van het ontvangen bericht opnieuw en controleert of de berekende HMAC overeenkomt met de verzonden HMAC.

Als de oorspronkelijke en berekende hashwaarden overeenkomen, wordt het bericht geverifieerd. Als ze niet overeenkomen, zijn de gegevens of de hashwaarde gewijzigd. HMAC's bieden beveiliging tegen manipulatie omdat kennis van de geheime sleutel is vereist om het bericht te wijzigen en de juiste hash-waarde te reproduceren.

HMACSHA512 accepteert sleutels van elke grootte en produceert een hashreeks van 512 bits.

Constructors

Name Description
HMACSHA512()

Initialiseert een nieuw exemplaar van de HMACSHA512 klasse met een willekeurig gegenereerde sleutel.

HMACSHA512(Byte[])

Initialiseert een nieuw exemplaar van de HMACSHA512 klasse met de opgegeven sleutelgegevens.

Velden

Name Description
HashSizeValue

Vertegenwoordigt de grootte, in bits, van de berekende hash-code.

(Overgenomen van HashAlgorithm)
HashValue

Vertegenwoordigt de waarde van de berekende hash-code.

(Overgenomen van HashAlgorithm)
KeyValue

De sleutel die moet worden gebruikt in het hash-algoritme.

(Overgenomen van KeyedHashAlgorithm)
State

Vertegenwoordigt de status van de hash-berekening.

(Overgenomen van HashAlgorithm)

Eigenschappen

Name Description
BlockSizeValue

Hiermee wordt de blokgrootte opgehaald of ingesteld voor gebruik in de hash-waarde.

(Overgenomen van HMAC)
CanReuseTransform

Hiermee wordt een waarde opgehaald die aangeeft of de huidige transformatie opnieuw kan worden gebruikt.

(Overgenomen van HashAlgorithm)
CanTransformMultipleBlocks

Wanneer deze wordt overschreven in een afgeleide klasse, krijgt u een waarde die aangeeft of meerdere blokken kunnen worden getransformeerd.

(Overgenomen van HashAlgorithm)
Hash

Hiermee haalt u de waarde op van de berekende hash-code.

(Overgenomen van HashAlgorithm)
HashName

Hiermee haalt u de naam op van het hash-algoritme dat moet worden gebruikt voor hashing.

(Overgenomen van HMAC)
HashSize

Hiermee wordt de grootte, in bits, van de berekende HMAC opgehaald.

HashSize

Hiermee haalt u de grootte, in bits, van de berekende hash-code op.

(Overgenomen van HashAlgorithm)
InputBlockSize

Wanneer deze wordt overschreven in een afgeleide klasse, haalt u de grootte van het invoerblok op.

(Overgenomen van HashAlgorithm)
Key

Hiermee haalt u de sleutel op die moet worden gebruikt in de HMAC-berekening.

Key

Hiermee haalt u de sleutel op die moet worden gebruikt in de HMAC-berekening.

(Overgenomen van HMAC)
OutputBlockSize

Wanneer deze wordt overschreven in een afgeleide klasse, haalt u de grootte van het uitvoerblok op.

(Overgenomen van HashAlgorithm)
ProduceLegacyHmacValues

Biedt een tijdelijke oplossing voor de .NET Framework 2.0-implementatie van het algoritme HMACSHA512, wat niet overeenkomt met de .NET Framework 2.0 Service Pack 1-implementatie.

Methoden

Name Description
Clear()

Alle resources die door de HashAlgorithm klasse worden gebruikt, worden vrijgegeven.

(Overgenomen van HashAlgorithm)
ComputeHash(Byte[], Int32, Int32)

Berekent de hashwaarde voor de opgegeven regio van de opgegeven bytematrix.

(Overgenomen van HashAlgorithm)
ComputeHash(Byte[])

Berekent de hashwaarde voor de opgegeven bytematrix.

(Overgenomen van HashAlgorithm)
ComputeHash(Stream)

Berekent de hashwaarde voor het opgegeven Stream object.

(Overgenomen van HashAlgorithm)
Dispose()

Alle resources die door het huidige exemplaar van de HashAlgorithm klasse worden gebruikt, worden vrijgegeven.

(Overgenomen van HashAlgorithm)
Dispose(Boolean)

Publiceert de niet-beheerde resources die worden gebruikt door de HMACSHA512 beheerde resources en brengt eventueel de beheerde resources vrij.

Dispose(Boolean)

Publiceert de niet-beheerde resources die door de HMAC klasse worden gebruikt wanneer een sleutelwijziging legitiem is en optioneel de beheerde resources vrijgeeft.

(Overgenomen van HMAC)
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
HashCore(Byte[], Int32, Int32)

Routeert gegevens die naar het object zijn geschreven in het HMAC-algoritme voor het berekenen van de HMAC.

HashCore(Byte[], Int32, Int32)

Wanneer deze worden overschreven in een afgeleide klasse, worden gegevens die naar het object zijn geschreven, gerouteerd naar het HMAC-algoritme om de HMAC-waarde te berekenen.

(Overgenomen van HMAC)
HashCore(ReadOnlySpan<Byte>)

Routeert gegevens die naar het object zijn geschreven in het HMAC-algoritme voor het berekenen van de HMAC.

HashFinal()

Hiermee voltooit u de HMAC-berekening nadat de laatste gegevens door het algoritme zijn verwerkt.

HashFinal()

Wanneer deze wordt overschreven in een afgeleide klasse, voltooit u de HMAC-berekening nadat de laatste gegevens door het algoritme zijn verwerkt.

(Overgenomen van HMAC)
Initialize()

Hiermee stelt u het hash-algoritme opnieuw in op de oorspronkelijke status.

Initialize()

Initialiseert een exemplaar van de standaard implementatie van HMAC.

(Overgenomen van HMAC)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)
TransformBlock(Byte[], Int32, Int32, Byte[], Int32)

Berekent de hashwaarde voor de opgegeven regio van de invoer bytematrix en kopieert de opgegeven regio van de invoer bytematrix naar de opgegeven regio van de uitvoer-bytematrix.

(Overgenomen van HashAlgorithm)
TransformFinalBlock(Byte[], Int32, Int32)

Berekent de hashwaarde voor de opgegeven regio van de opgegeven bytematrix.

(Overgenomen van HashAlgorithm)
TryComputeHash(ReadOnlySpan<Byte>, Span<Byte>, Int32)

Hiermee wordt geprobeerd de hash-waarde voor de opgegeven bytematrix te berekenen.

(Overgenomen van HashAlgorithm)
TryHashFinal(Span<Byte>, Int32)

Pogingen om de HMAC-berekening te voltooien nadat de laatste gegevens zijn verwerkt door het HMAC-algoritme.

Expliciete interface-implementaties

Name Description
IDisposable.Dispose()

Publiceert de niet-beheerde resources die worden gebruikt door de HashAlgorithm beheerde resources en brengt eventueel de beheerde resources vrij.

(Overgenomen van HashAlgorithm)

Van toepassing op

Zie ook