共用方式為


驗證雜湊

更新:2007 年 11 月

可比對資料與雜湊值決定其完整性。通常,資料是在某個時間雜湊並以某種方式來保護雜湊值。稍後,可再雜湊資料一次並與受到保護的值相比對。如果雜湊值相符,則資料未被更改。但是,如果值不相符,則資料已損毀。若要讓這個系統運作順利,受保護的雜湊必須加密或對所有未受信任者保密。

以下範例比對字串之前的雜湊值和新雜湊值。這個範例以迴圈 (Loop) 方式比較雜湊值的每個位元組。

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.");
      }
   }
}

如果兩個雜湊值相符,這個程式碼就會對主控台顯示以下內容:

The hash codes match.

但是,如果不相符,程式碼將顯示以下內容:

The hash codes do not match.

請參閱

概念

產生雜湊

使用雜湊程式碼確定資料完整性

其他資源

密碼編譯工作

密碼編譯服務