Partager via


Vérification d'un hachage

Des données peuvent être comparées à une valeur de hachage pour déterminer leur intégrité. Habituellement, les données font l'objet d'un hachage à un moment donné et la valeur de hachage est protégée d'une certaine manière. Les données peuvent ultérieurement faire de nouveau l'objet d'un hachage et être comparées à la valeur protégée. Si les valeurs de hachage correspondent, cela signifie que les données n'ont pas été modifiées. Cependant, si les valeurs ne correspondent pas, les données ont été endommagées. Pour que ce système fonctionne, le hachage protégé doit être chiffré ou tenu à l'abri de toutes les parties qui ne sont pas dignes de confiance.

L'exemple suivant compare la valeur de hachage précédente d'une chaîne à une nouvelle valeur de hachage. Cet exemple parcourt chaque octet des valeurs de hachage et effectue une comparaison.

Imports System
Imports System.Security.Cryptography
Imports System.Text

Module Module1
    Sub Main()
            'This hash value is produced from "This is the original message!" 
            'using SHA1Managed.  
            Dim SentHashValue As Byte() = {59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135}

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

            Dim CompareHashValue() As Byte

            'Create a new instance of the UnicodeEncoding class to 
            'convert the string into an array of Unicode bytes.
            Dim UE As New UnicodeEncoding()

            'Convert the string into an array of bytes.
            Dim MessageBytes As Byte() = UE.GetBytes(MessageString)

            'Create a new instance of the SHA1Managed class to create 
            'the hash value.
            Dim SHhash As New SHA1Managed()

            'Create the hash value from the array of bytes.
            CompareHashValue = SHhash.ComputeHash(MessageBytes)

            Dim Same As Boolean = True

            'Compare the values of the two byte arrays.
            Dim x As Integer
            For x = 0 To SentHashValue.Length - 1
                If SentHashValue(x) <> CompareHashValue(x) Then
                    Same = False
                End If
            Next x
            '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
using System;
using System.Security.Cryptography;
using System.Text;

class Class1
{
   static void Main()
   {
      //This hash value is produced from "This is the original message!" 
      //using SHA1Managed.  
      byte[] SentHashValue = {59,4,248,102,77,97,142,201,210,12,224,93,25,41,100,197,213,134,130,135};

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

      byte[] CompareHashValue;

      //Create a new instance of the UnicodeEncoding class to 
      //convert the string into an array of Unicode bytes.
      UnicodeEncoding UE = new UnicodeEncoding();

      //Convert the string into an array of bytes.
      byte[] MessageBytes = UE.GetBytes(MessageString);

      //Create a new instance of the SHA1Managed class to create 
      //the hash value.
      SHA1Managed SHhash = new SHA1Managed();

      //Create the hash value from the array of bytes.
      CompareHashValue = SHhash.ComputeHash(MessageBytes);

      bool Same = true;

      //Compare the values of the two byte arrays.
      for(int x = 0; x < SentHashValue.Length;x++)
      {
         if (SentHashValue[x] != CompareHashValue[x])
         {
            Same = false;
         }
      }
      //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.");
      }
   }
}

Si les deux valeurs de hachage correspondent, ce code affiche ce qui suit sur la console :

The hash codes match.

Toutefois, si celles-ci ne correspondent pas, le code affiche ce qui suit :

The hash codes do not match.

Voir aussi

Concepts

Génération d'un hachage
Garantie de l'intégrité des données à l'aide des codes de hachage

Autres ressources

Tâches de chiffrement
Services de chiffrement