Delen via


Gegevensintegriteit garanderen met hashcodes

Een hashwaarde is een numerieke waarde van een vaste lengte die gegevens uniek identificeert. Hash-waarden vertegenwoordigen grote hoeveelheden gegevens als veel kleinere numerieke waarden, zodat ze worden gebruikt met digitale handtekeningen. U kunt een hashwaarde efficiënter ondertekenen dan de grotere waarde ondertekenen. Hash-waarden zijn ook handig voor het controleren van de integriteit van gegevens die worden verzonden via onveilige kanalen. De hashwaarde van ontvangen gegevens kan worden vergeleken met de hashwaarde van gegevens zoals deze is verzonden om te bepalen of de gegevens zijn gewijzigd.

In dit onderwerp wordt beschreven hoe u hashcodes genereert en verifieert met behulp van de klassen in de System.Security.Cryptography naamruimte.

Een hash genereren

De hashklassen kunnen een matrix van bytes of een streamobject hashen. In het volgende voorbeeld wordt het SHA-256-hashalgoritme gebruikt om een hash-waarde voor een tekenreeks te maken. In het voorbeeld wordt Encoding.UTF8 de tekenreeks geconverteerd naar een matrix van bytes die zijn gehasht met behulp van de SHA256 klasse. De hashwaarde wordt vervolgens weergegeven in de console.

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

string messageString = "This is the original message!";

//Convert the string into an array of bytes.
byte[] messageBytes = Encoding.UTF8.GetBytes(messageString);

//Create the hash value from the array of bytes.
byte[] hashValue = SHA256.HashData(messageBytes);

//Display the hash value to the console.
Console.WriteLine(Convert.ToHexString(hashValue));
Imports System.Security.Cryptography
Imports System.Text

Module Program
    Sub Main()
        Dim messageString As String = "This is the original message!"

        'Convert the string into an array of bytes.
        Dim messageBytes As Byte() = Encoding.UTF8.GetBytes(messageString)

        'Create the hash value from the array of bytes.
        Dim hashValue As Byte() = SHA256.HashData(messageBytes)

        'Display the hash value to the console. 
        Console.WriteLine(Convert.ToHexString(hashValue))
    End Sub
End Module

Met deze code wordt de volgende tekenreeks weergegeven in de console:

67A1790DCA55B8803AD024EE28F616A284DF5DD7B8BA5F68B4B252A5E925AF79

Een hash verifiëren

Gegevens kunnen worden vergeleken met een hashwaarde om de integriteit ervan te bepalen. Meestal worden gegevens op een bepaald moment gehasht en wordt de hashwaarde op een of andere manier beveiligd. Op een later tijdstip kunnen de gegevens opnieuw worden gehasht en vergeleken met de beveiligde waarde. Als de hashwaarden overeenkomen, zijn de gegevens niet gewijzigd. Als de waarden niet overeenkomen, zijn de gegevens beschadigd. Om dit systeem te laten werken, moet de beveiligde hash worden versleuteld of geheim worden gehouden van alle niet-vertrouwde partijen.

In het volgende voorbeeld wordt de vorige hashwaarde van een tekenreeks vergeleken met een nieuwe hash-waarde.

using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

//This hash value is produced from "This is the original message!"
//using SHA256.
byte[] sentHashValue = Convert.FromHexString("67A1790DCA55B8803AD024EE28F616A284DF5DD7B8BA5F68B4B252A5E925AF79");

//This is the string that corresponds to the previous hash value.
string messageString = "This is the original message!";

//Convert the string into an array of bytes.
byte[] messageBytes = Encoding.UTF8.GetBytes(messageString);

//Create the hash value from the array of bytes.
byte[] compareHashValue = SHA256.HashData(messageBytes);

//Compare the values of the two byte arrays.
bool same = sentHashValue.SequenceEqual(compareHashValue);

//Display whether or not the hash values are the same.
if (same)
{
    Console.WriteLine("The hash codes match.");
}
else
{
    Console.WriteLine("The hash codes do not match.");
}
Imports System.Linq
Imports System.Security.Cryptography
Imports System.Text

Module Module1
    Sub Main()
        'This hash value is produced from "This is the original message!" 
        'using SHA256.  
        Dim sentHashValue As Byte() = Convert.FromHexString("67A1790DCA55B8803AD024EE28F616A284DF5DD7B8BA5F68B4B252A5E925AF79")

        'This is the string that corresponds to the previous hash value.
        Dim messageString As String = "This is the original message!"

        'Convert the string into an array of bytes.
        Dim messageBytes As Byte() = Encoding.UTF8.GetBytes(messageString)

        'Create the hash value from the array of bytes.
        Dim compareHashValue As Byte() = SHA256.HashData(messageBytes)

        'Compare the values of the two byte arrays.
        Dim same As Boolean = sentHashValue.SequenceEqual(compareHashValue)

        'Display whether or not the hash values are the same.
        If same Then
            Console.WriteLine("The hash codes match.")
        Else
            Console.WriteLine("The hash codes do not match.")
        End If
    End Sub
End Module

Zie ook